{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# RAG & Embeddings & Vector Store\n",
    "\n",
    "## 💡 这节课会带给你\n",
    "\n",
    "1. 如何用你的垂域数据补充 LLM 的能力\n",
    "2. 如何构建你的垂域（向量）知识库\n",
    "3. 搭建一套完整 RAG 系统需要哪些模块\n",
    "4. 搭建 RAG 系统时更多的有用技巧"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 一、什么是检索增强的生成模型（RAG）\n",
    "\n",
    "### 1.1 大模型目前固有的局限性\n",
    "\n",
    "1. LLM的知识不是实时的\n",
    "2. LLM 可能不知道你私有的领域/业务知识"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.2 检索增强生成\n",
    "\n",
    "RAG（Retrieval Augmented Generation）顾名思义，通过**检索**的方法来增强**生成模型**的能力。\n",
    "\n",
    "<video src=\"./assets/RAG.mp4\" controls=\"controls\" width=1024px style=\"margin-left: 0px\"></video>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-success\">\n",
    "<b>类比：</b>你可以把这个过程想象成开卷考试。让 LLM 先翻书，再回答问题。\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 二、RAG系统的基本搭建流程\n",
    "\n",
    "<img src=\"./assets/rag.png\" style=\"margin-left: 0px\" width=1024px>\n",
    "\n",
    "搭建过程：\n",
    "\n",
    "1. 文档加载，并按一定条件**切割**成片段\n",
    "2. 将切割的文本片段灌入**检索引擎**\n",
    "3. 封装**检索接口**\n",
    "4. 构建**调用流程**：Query -> 检索 -> Prompt -> LLM -> 回复\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.1 文档的加载与切割"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# !pip install --upgrade openai"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 安装 pdf 解析库\n",
    "# !pip install pdfminer.six"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pdfminer.high_level import extract_pages\n",
    "from pdfminer.layout import LTTextContainer"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def extract_text_from_pdf(filename, page_numbers=None, min_line_length=1):\n",
    "    '''从 PDF 文件中（按指定页码）提取文字'''\n",
    "    paragraphs = []\n",
    "    buffer = ''\n",
    "    full_text = ''\n",
    "    # 提取全部文本\n",
    "    for i, page_layout in enumerate(extract_pages(filename)):\n",
    "        # 如果指定了页码范围，跳过范围外的页\n",
    "        if page_numbers is not None and i not in page_numbers:\n",
    "            continue\n",
    "        for element in page_layout:\n",
    "            if isinstance(element, LTTextContainer):\n",
    "                full_text += element.get_text() + '\\n'\n",
    "    # 按空行分隔，将文本重新组织成段落\n",
    "    lines = full_text.split('\\n')\n",
    "    for text in lines:\n",
    "        if len(text) >= min_line_length:\n",
    "            buffer += (' '+text) if not text.endswith('-') else text.strip('-')\n",
    "        elif buffer:\n",
    "            paragraphs.append(buffer)\n",
    "            buffer = ''\n",
    "    if buffer:\n",
    "        paragraphs.append(buffer)\n",
    "    return paragraphs"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " Llama 2: Open Foundation and Fine-Tuned Chat Models\n",
      "\n",
      " Hugo Touvron∗ Louis Martin† Kevin Stone† Peter Albert Amjad Almahairi Yasmine Babaei Nikolay Bashlykov Soumya Batra Prajjwal Bhargava Shruti Bhosale Dan Bikel Lukas Blecher Cristian Canton Ferrer Moya Chen Guillem Cucurull David Esiobu Jude Fernandes Jeremy Fu Wenyin Fu Brian Fuller Cynthia Gao Vedanuj Goswami Naman Goyal Anthony Hartshorn Saghar Hosseini Rui Hou Hakan Inan Marcin Kardas Viktor Kerkez Madian Khabsa Isabel Kloumann Artem Korenev Punit Singh Koura Marie-Anne Lachaux Thibaut Lavril Jenya Lee Diana Liskovich Yinghai Lu Yuning Mao Xavier Martinet Todor Mihaylov Pushkar Mishra Igor Molybog Yixin Nie Andrew Poulton Jeremy Reizenstein Rashi Rungta Kalyan Saladi Alan Schelten Ruan Silva Eric Michael Smith Ranjan Subramanian Xiaoqing Ellen Tan Binh Tang Ross Taylor Adina Williams Jian Xiang Kuan Puxin Xu Zheng Yan Iliyan Zarov Yuchen Zhang Angela Fan Melanie Kambadur Sharan Narang Aurelien Rodriguez Robert Stojnic Sergey Edunov Thomas Scialom∗\n",
      "\n",
      " GenAI, Meta\n",
      "\n",
      " In this work, we develop and release Llama 2, a collection of pretrained and ﬁne-tuned large language models (LLMs) ranging in scale from 7 billion to 70 billion parameters. Our ﬁne-tuned LLMs, called Llama 2-Chat, are optimized for dialogue use cases. Our models outperform open-source chat models on most benchmarks we tested, and based onour human evaluations for helpfulness and safety, may be a suitable substitute for closed source models. We provide a detailed description of our approach to ﬁne-tuning and safety improvements of Llama 2-Chat in order to enable the community to build on our work and contribute to the responsible development of LLMs.\n",
      "\n",
      " ∗Equal contribution, corresponding authors: {tscialom, htouvron}@meta.com †Second author\n",
      "\n",
      " Contributions for all the authors can be found in Section A.1.\n",
      "\n",
      " 1 Introduction\n",
      "\n",
      " 2 Pretraining\n",
      "\n"
     ]
    }
   ],
   "source": [
    "paragraphs = extract_text_from_pdf(\"llama2.pdf\", min_line_length=10)\n",
    "\n",
    "for para in paragraphs[:8]:\n",
    "    print(para+\"\\n\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.2 LLM接口封装"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [],
   "source": [
    "# !pip install -U python-dotenv"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--Return--\n",
      "None\n",
      "> \u001b[0;32m/var/folders/44/7787pss55pv87g6d4hdjzhdh0000gn/T/ipykernel_31610/1950850113.py\u001b[0m(7)\u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n",
      "\u001b[0;32m      5 \u001b[0;31m\u001b[0;31m# 加载环境变量\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0m\u001b[0;32m      6 \u001b[0;31m\u001b[0;32mfrom\u001b[0m \u001b[0mdotenv\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mload_dotenv\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfind_dotenv\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0m\u001b[0;32m----> 7 \u001b[0;31m\u001b[0mpdb\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mset_trace\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0m\u001b[0;32m      8 \u001b[0;31m\u001b[0m_\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mload_dotenv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfind_dotenv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mverbose\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m  \u001b[0;31m# 读取本地 .env 文件，里面定义了 OPENAI_API_KEY\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0m\u001b[0;32m      9 \u001b[0;31m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0m\n",
      "*** NameError: name 'ipdb' is not defined\n",
      "*** SyntaxError: invalid syntax\n"
     ]
    }
   ],
   "source": [
    "from openai import OpenAI\n",
    "import os\n",
    "# 加载环境变量\n",
    "from dotenv import load_dotenv, find_dotenv\n",
    "_ = load_dotenv(find_dotenv(), verbose=False)  # 读取本地 .env 文件，里面定义了 OPENAI_API_KEY\n",
    "\n",
    "client = OpenAI()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_completion(prompt, model=\"gpt-4o\"):\n",
    "    '''封装 openai 接口'''\n",
    "    messages = [{\"role\": \"user\", \"content\": prompt}]\n",
    "    response = client.chat.completions.create(\n",
    "        model=model,\n",
    "        messages=messages,\n",
    "        temperature=0,  # 模型输出的随机性，0 表示随机性最小\n",
    "    )\n",
    "    return response.choices[0].message.content"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.3 Prompt 模板"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "def build_prompt(prompt_template, **kwargs):\n",
    "    '''将 Prompt 模板赋值'''\n",
    "    inputs = {}\n",
    "    for k, v in kwargs.items():\n",
    "        if isinstance(v, list) and all(isinstance(elem, str) for elem in v):\n",
    "            val = '\\n\\n'.join(v)\n",
    "        else:\n",
    "            val = v\n",
    "        inputs[k] = val\n",
    "    return prompt_template.format(**inputs)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "prompt_template = \"\"\"\n",
    "你是一个问答机器人。\n",
    "你的任务是根据下述给定的已知信息回答用户问题。\n",
    "\n",
    "已知信息:\n",
    "{context} # 检索出来的原始文档\n",
    "\n",
    "用户问：\n",
    "{query} # 用户的提问\n",
    "\n",
    "如果已知信息不包含用户问题的答案，或者已知信息不足以回答用户的问题，请直接回复\"我无法回答您的问题\"。\n",
    "请不要输出已知信息中不包含的信息或答案。\n",
    "请用中文回答用户问题。\n",
    "\"\"\""
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 三、向量检索\n",
    "\n",
    "### 3.1 什么是向量\n",
    "\n",
    "向量是一种有大小和方向的数学对象。它可以表示为从一个点到另一个点的有向线段。例如，二维空间中的向量可以表示为 $(x,y)$，表示从原点 $(0,0)$ 到点 $(x,y)$ 的有向线段。\n",
    "<br />\n",
    "<img src=\"./assets/vector.png\" style=\"margin-left: 0px\" width=800px>\n",
    "<br />\n",
    "以此类推，我可以用一组坐标 $(x_0, x_1, \\ldots, x_{N-1})$ 表示一个 $N$ 维空间中的向量，$N$ 叫向量的维度。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 3.1.1 文本向量（Text Embeddings）\n",
    "\n",
    "1. 将文本转成一组 $N$ 维浮点数，即**文本向量**又叫 Embeddings\n",
    "2. 向量之间可以计算距离，距离远近对应**语义相似度**大小\n",
    "\n",
    "<br />\n",
    "<img src=\"./assets/embeddings.png\" style=\"margin-left: 0px\" width=800px>\n",
    "<br />"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.1.2 文本向量是怎么得到的（选）\n",
    "\n",
    "1. 构建相关（正例）与不相关（负例）的句子对样本\n",
    "2. 训练双塔式模型，让正例间的距离小，负例间的距离大\n",
    "\n",
    "例如：\n",
    "\n",
    "<img src=\"./assets/sbert.png\" style=\"margin-left: 0px\" width=500px>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-info\">\n",
    "<b>扩展阅读：https://www.sbert.net</b>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.2 向量间的相似度计算\n",
    "\n",
    "<img src=\"./assets/sim.png\" style=\"margin-left: 0px\" width=500px>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from numpy import dot\n",
    "from numpy.linalg import norm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "def cos_sim(a, b):\n",
    "    '''余弦距离 -- 越大越相似'''\n",
    "    return dot(a, b)/(norm(a)*norm(b))\n",
    "\n",
    "\n",
    "def l2(a, b):\n",
    "    '''欧氏距离 -- 越小越相似'''\n",
    "    x = np.asarray(a)-np.asarray(b)\n",
    "    return norm(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "def get_embeddings(texts, model=\"text-embedding-ada-002\", dimensions=None):\n",
    "    '''封装 OpenAI 的 Embedding 模型接口'''\n",
    "    if model == \"text-embedding-ada-002\":\n",
    "        dimensions = None\n",
    "    if dimensions:\n",
    "        data = client.embeddings.create(\n",
    "            input=texts, model=model, dimensions=dimensions).data\n",
    "    else:\n",
    "        data = client.embeddings.create(input=texts, model=model).data\n",
    "    return [x.embedding for x in data]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "ename": "AuthenticationError",
     "evalue": "Authorization",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mAuthenticationError\u001b[0m                       Traceback (most recent call last)",
      "Cell \u001b[0;32mIn[21], line 2\u001b[0m\n\u001b[1;32m      1\u001b[0m test_query \u001b[38;5;241m=\u001b[39m [\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m测试文本\u001b[39m\u001b[38;5;124m\"\u001b[39m]\n\u001b[0;32m----> 2\u001b[0m vec \u001b[38;5;241m=\u001b[39m \u001b[43mget_embeddings\u001b[49m\u001b[43m(\u001b[49m\u001b[43mtest_query\u001b[49m\u001b[43m)\u001b[49m[\u001b[38;5;241m0\u001b[39m]\n\u001b[1;32m      3\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mTotal dimension: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00m\u001b[38;5;28mlen\u001b[39m(vec)\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n\u001b[1;32m      4\u001b[0m \u001b[38;5;28mprint\u001b[39m(\u001b[38;5;124mf\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mFirst 10 elements: \u001b[39m\u001b[38;5;132;01m{\u001b[39;00mvec[:\u001b[38;5;241m10\u001b[39m]\u001b[38;5;132;01m}\u001b[39;00m\u001b[38;5;124m\"\u001b[39m)\n",
      "Cell \u001b[0;32mIn[20], line 9\u001b[0m, in \u001b[0;36mget_embeddings\u001b[0;34m(texts, model, dimensions)\u001b[0m\n\u001b[1;32m      6\u001b[0m     data \u001b[38;5;241m=\u001b[39m client\u001b[38;5;241m.\u001b[39membeddings\u001b[38;5;241m.\u001b[39mcreate(\n\u001b[1;32m      7\u001b[0m         \u001b[38;5;28minput\u001b[39m\u001b[38;5;241m=\u001b[39mtexts, model\u001b[38;5;241m=\u001b[39mmodel, dimensions\u001b[38;5;241m=\u001b[39mdimensions)\u001b[38;5;241m.\u001b[39mdata\n\u001b[1;32m      8\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m----> 9\u001b[0m     data \u001b[38;5;241m=\u001b[39m \u001b[43mclient\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43membeddings\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43minput\u001b[39;49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtexts\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmodel\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmodel\u001b[49m\u001b[43m)\u001b[49m\u001b[38;5;241m.\u001b[39mdata\n\u001b[1;32m     10\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m [x\u001b[38;5;241m.\u001b[39membedding \u001b[38;5;28;01mfor\u001b[39;00m x \u001b[38;5;129;01min\u001b[39;00m data]\n",
      "File \u001b[0;32m~/code/ai/llm/.venv/lib/python3.10/site-packages/openai/resources/embeddings.py:128\u001b[0m, in \u001b[0;36mEmbeddings.create\u001b[0;34m(self, input, model, dimensions, encoding_format, user, extra_headers, extra_query, extra_body, timeout)\u001b[0m\n\u001b[1;32m    122\u001b[0m             embedding\u001b[38;5;241m.\u001b[39membedding \u001b[38;5;241m=\u001b[39m np\u001b[38;5;241m.\u001b[39mfrombuffer(  \u001b[38;5;66;03m# type: ignore[no-untyped-call]\u001b[39;00m\n\u001b[1;32m    123\u001b[0m                 base64\u001b[38;5;241m.\u001b[39mb64decode(data), dtype\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mfloat32\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[1;32m    124\u001b[0m             )\u001b[38;5;241m.\u001b[39mtolist()\n\u001b[1;32m    126\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m obj\n\u001b[0;32m--> 128\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_post\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m    129\u001b[0m \u001b[43m    \u001b[49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[38;5;124;43m/embeddings\u001b[39;49m\u001b[38;5;124;43m\"\u001b[39;49m\u001b[43m,\u001b[49m\n\u001b[1;32m    130\u001b[0m \u001b[43m    \u001b[49m\u001b[43mbody\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmaybe_transform\u001b[49m\u001b[43m(\u001b[49m\u001b[43mparams\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43membedding_create_params\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mEmbeddingCreateParams\u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    131\u001b[0m \u001b[43m    \u001b[49m\u001b[43moptions\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mmake_request_options\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m    132\u001b[0m \u001b[43m        \u001b[49m\u001b[43mextra_headers\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mextra_headers\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    133\u001b[0m \u001b[43m        \u001b[49m\u001b[43mextra_query\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mextra_query\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    134\u001b[0m \u001b[43m        \u001b[49m\u001b[43mextra_body\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mextra_body\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    135\u001b[0m \u001b[43m        \u001b[49m\u001b[43mtimeout\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mtimeout\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    136\u001b[0m \u001b[43m        \u001b[49m\u001b[43mpost_parser\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mparser\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    137\u001b[0m \u001b[43m    \u001b[49m\u001b[43m)\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    138\u001b[0m \u001b[43m    \u001b[49m\u001b[43mcast_to\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mCreateEmbeddingResponse\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    139\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[0;32m~/code/ai/llm/.venv/lib/python3.10/site-packages/openai/_base_client.py:1242\u001b[0m, in \u001b[0;36mSyncAPIClient.post\u001b[0;34m(self, path, cast_to, body, options, files, stream, stream_cls)\u001b[0m\n\u001b[1;32m   1228\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21mpost\u001b[39m(\n\u001b[1;32m   1229\u001b[0m     \u001b[38;5;28mself\u001b[39m,\n\u001b[1;32m   1230\u001b[0m     path: \u001b[38;5;28mstr\u001b[39m,\n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m   1237\u001b[0m     stream_cls: \u001b[38;5;28mtype\u001b[39m[_StreamT] \u001b[38;5;241m|\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mNone\u001b[39;00m,\n\u001b[1;32m   1238\u001b[0m ) \u001b[38;5;241m-\u001b[39m\u001b[38;5;241m>\u001b[39m ResponseT \u001b[38;5;241m|\u001b[39m _StreamT:\n\u001b[1;32m   1239\u001b[0m     opts \u001b[38;5;241m=\u001b[39m FinalRequestOptions\u001b[38;5;241m.\u001b[39mconstruct(\n\u001b[1;32m   1240\u001b[0m         method\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mpost\u001b[39m\u001b[38;5;124m\"\u001b[39m, url\u001b[38;5;241m=\u001b[39mpath, json_data\u001b[38;5;241m=\u001b[39mbody, files\u001b[38;5;241m=\u001b[39mto_httpx_files(files), \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39moptions\n\u001b[1;32m   1241\u001b[0m     )\n\u001b[0;32m-> 1242\u001b[0m     \u001b[38;5;28;01mreturn\u001b[39;00m cast(ResponseT, \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mrequest\u001b[49m\u001b[43m(\u001b[49m\u001b[43mcast_to\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mopts\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstream\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstream_cls\u001b[49m\u001b[43m)\u001b[49m)\n",
      "File \u001b[0;32m~/code/ai/llm/.venv/lib/python3.10/site-packages/openai/_base_client.py:919\u001b[0m, in \u001b[0;36mSyncAPIClient.request\u001b[0;34m(self, cast_to, options, remaining_retries, stream, stream_cls)\u001b[0m\n\u001b[1;32m    916\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m    917\u001b[0m     retries_taken \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m\n\u001b[0;32m--> 919\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_request\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m    920\u001b[0m \u001b[43m    \u001b[49m\u001b[43mcast_to\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mcast_to\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    921\u001b[0m \u001b[43m    \u001b[49m\u001b[43moptions\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43moptions\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    922\u001b[0m \u001b[43m    \u001b[49m\u001b[43mstream\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstream\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    923\u001b[0m \u001b[43m    \u001b[49m\u001b[43mstream_cls\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstream_cls\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    924\u001b[0m \u001b[43m    \u001b[49m\u001b[43mretries_taken\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mretries_taken\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m    925\u001b[0m \u001b[43m\u001b[49m\u001b[43m)\u001b[49m\n",
      "File \u001b[0;32m~/code/ai/llm/.venv/lib/python3.10/site-packages/openai/_base_client.py:1023\u001b[0m, in \u001b[0;36mSyncAPIClient._request\u001b[0;34m(self, cast_to, options, retries_taken, stream, stream_cls)\u001b[0m\n\u001b[1;32m   1020\u001b[0m         err\u001b[38;5;241m.\u001b[39mresponse\u001b[38;5;241m.\u001b[39mread()\n\u001b[1;32m   1022\u001b[0m     log\u001b[38;5;241m.\u001b[39mdebug(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mRe-raising status error\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m-> 1023\u001b[0m     \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_make_status_error_from_response(err\u001b[38;5;241m.\u001b[39mresponse) \u001b[38;5;28;01mfrom\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;28;01mNone\u001b[39;00m\n\u001b[1;32m   1025\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_process_response(\n\u001b[1;32m   1026\u001b[0m     cast_to\u001b[38;5;241m=\u001b[39mcast_to,\n\u001b[1;32m   1027\u001b[0m     options\u001b[38;5;241m=\u001b[39moptions,\n\u001b[0;32m   (...)\u001b[0m\n\u001b[1;32m   1031\u001b[0m     retries_taken\u001b[38;5;241m=\u001b[39mretries_taken,\n\u001b[1;32m   1032\u001b[0m )\n",
      "\u001b[0;31mAuthenticationError\u001b[0m: Authorization"
     ]
    }
   ],
   "source": [
    "test_query = [\"测试文本\"]\n",
    "vec = get_embeddings(test_query)[0]\n",
    "print(f\"Total dimension: {len(vec)}\")\n",
    "print(f\"First 10 elements: {vec[:10]}\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Query与自己的余弦距离: 1.00\n",
      "Query与Documents的余弦距离:\n",
      "0.8224810779975097\n",
      "0.8299968969406545\n",
      "0.798096878742543\n",
      "0.7669367418371253\n",
      "0.7933908049643592\n",
      "\n",
      "Query与自己的欧氏距离: 0.00\n",
      "Query与Documents的欧氏距离:\n",
      "0.5958505343143035\n",
      "0.5831005284209486\n",
      "0.6354574886516438\n",
      "0.6827345862824111\n",
      "0.6428206511188914\n"
     ]
    }
   ],
   "source": [
    "query = \"国际争端\"\n",
    "\n",
    "# 且能支持跨语言\n",
    "# query = \"global conflicts\"\n",
    "\n",
    "documents = [\n",
    "    \"联合国就苏丹达尔富尔地区大规模暴力事件发出警告\",\n",
    "    \"土耳其、芬兰、瑞典与北约代表将继续就瑞典“入约”问题进行谈判\",\n",
    "    \"日本岐阜市陆上自卫队射击场内发生枪击事件 3人受伤\",\n",
    "    \"国家游泳中心（水立方）：恢复游泳、嬉水乐园等水上项目运营\",\n",
    "    \"我国首次在空间站开展舱外辐射生物学暴露实验\",\n",
    "]\n",
    "\n",
    "query_vec = get_embeddings([query])[0]\n",
    "doc_vecs = get_embeddings(documents)\n",
    "\n",
    "print(\"Query与自己的余弦距离: {:.2f}\".format(cos_sim(query_vec, query_vec)))\n",
    "print(\"Query与Documents的余弦距离:\")\n",
    "for vec in doc_vecs:\n",
    "    print(cos_sim(query_vec, vec))\n",
    "\n",
    "print()\n",
    "\n",
    "print(\"Query与自己的欧氏距离: {:.2f}\".format(l2(query_vec, query_vec)))\n",
    "print(\"Query与Documents的欧氏距离:\")\n",
    "for vec in doc_vecs:\n",
    "    print(l2(query_vec, vec))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.3 向量数据库\n",
    "\n",
    "向量数据库，是专门为向量检索设计的中间件！\n",
    "\n",
    "向量数据库其实最早在传统的人工智能和机器学习场景中就有所应用。在大模型兴起后，由于目前大模型的token数限制，很多开发者倾向于将数据量庞大的知识、新闻、文献、语料等先通过嵌入（embedding）算法转变为向量数据，然后存储在Chroma等向量数据库中。当用户在大模型输入问题后，将问题本身也embedding，转化为向量，在向量数据库中查找与之最匹配的相关知识，组成大模型的上下文，将其输入给大模型，最终返回大模型处理后的文本给用户，这种方式不仅降低大模型的计算量，提高响应速度，也降低成本，并避免了大模型的tokens限制，是一种简单高效的处理手段。此外，向量数据库还在大模型记忆存储等领域发挥其不可替代的作用。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 3.3.1 Chroma 向量数据库\n",
    "\n",
    "官方文档：https://docs.trychroma.com/docs/overview/introduction\n",
    "\n",
    "<img src=\"./assets/chroma.svg\" style=\"margin-left: 0px\" width=800px>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# !pip install chromadb"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 为了演示方便，我们只取两页（第一章）\n",
    "paragraphs = extract_text_from_pdf(\n",
    "    \"llama2.pdf\",\n",
    "    page_numbers=[2, 3],\n",
    "    min_line_length=10\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [],
   "source": [
    "import chromadb\n",
    "from chromadb.config import Settings\n",
    "\n",
    "class MyVectorDBConnector:\n",
    "    def __init__(self, collection_name, embedding_fn):\n",
    "        # 内存模式\n",
    "        chroma_client = chromadb.Client(Settings(allow_reset=True))\n",
    "        # 数据持久化\n",
    "        # chroma_client = chromadb.PersistentClient(path=\"./chroma\")\n",
    "\n",
    "        # 注意：为了演示，实际不需要每次 reset()，并且是不可逆的！\n",
    "        chroma_client.reset()\n",
    "\n",
    "        # 创建一个 collection\n",
    "        self.collection = chroma_client.get_or_create_collection(name=collection_name)\n",
    "        self.embedding_fn = embedding_fn\n",
    "\n",
    "    def add_documents(self, documents):\n",
    "        '''向 collection 中添加文档与向量'''\n",
    "        self.collection.add(\n",
    "            embeddings=self.embedding_fn(documents),  # 每个文档的向量\n",
    "            documents=documents,  # 文档的原文\n",
    "            ids=[f\"id{i}\" for i in range(len(documents))]  # 每个文档的 id\n",
    "        )\n",
    "\n",
    "    def search(self, query, top_n):\n",
    "        '''检索向量数据库'''\n",
    "        results = self.collection.query(\n",
    "            query_embeddings=self.embedding_fn([query]),\n",
    "            n_results=top_n\n",
    "        )\n",
    "        return results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " 1. Llama 2, an updated version of Llama 1, trained on a new mix of publicly available data. We also increased the size of the pretraining corpus by 40%, doubled the context length of the model, and adopted grouped-query attention (Ainslie et al., 2023). We are releasing variants of Llama 2 with 7B, 13B, and 70B parameters. We have also trained 34B variants, which we report on in this paper but are not releasing.§\n",
      "\n",
      " In this work, we develop and release Llama 2, a family of pretrained and ﬁne-tuned LLMs, Llama 2 and Llama 2-Chat, at scales up to 70B parameters. On the series of helpfulness and safety benchmarks we tested, Llama 2-Chat models generally perform better than existing open-source models. They also appear to be on par with some of the closed-source models, at least on the human evaluations we performed (see Figures 1 and 3). We have taken measures to increase the safety of these models, using safety-speciﬁc data annotation and tuning, as well as conducting red-teaming and employing iterative evaluations. Additionally, this paper contributes a thorough description of our ﬁne-tuning methodology and approach to improving LLM safety. We hope that this openness will enable the community to reproduce ﬁne-tuned LLMs and continue to improve the safety of those models, paving the way for more responsible development of LLMs. We also share novel observations we made during the development of Llama 2 and Llama 2-Chat, such as the emergence of tool usage and temporal organization of knowledge.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# 创建一个向量数据库对象\n",
    "vector_db = MyVectorDBConnector(\"demo\", get_embeddings)\n",
    "# 向向量数据库中添加文档\n",
    "vector_db.add_documents(paragraphs)\n",
    "\n",
    "user_query = \"Llama 2有多少参数\"\n",
    "# user_query = \"Does Llama 2 have a conversational variant\"\n",
    "results = vector_db.search(user_query, 2)\n",
    "\n",
    "for para in results['documents'][0]:\n",
    "    print(para+\"\\n\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-success\">\n",
    "<b>澄清几个关键概念：</b><ul>\n",
    "    <li>向量数据库的意义是快速的检索；</li>\n",
    "    <li>向量数据库本身不生成向量，向量是由 Embedding 模型产生的；</li>\n",
    "    <li>向量数据库与传统的关系型数据库是互补的，不是替代关系，在实际应用中根据实际需求经常同时使用。</li>\n",
    "</ul>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 3.3.2 Chroma 向量数据库服务\n",
    "\n",
    "Server 端\n",
    "\n",
    "```sh\n",
    "chroma run --path /db_path\n",
    "```\n",
    "\n",
    "Client 端\n",
    "\n",
    "```python\n",
    "import chromadb\n",
    "chroma_client = chromadb.HttpClient(host='localhost', port=8000)\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 3.3.3 主流向量数据库功能对比\n",
    "\n",
    "<img src=\"./assets/vectordb.png\" style=\"margin-left: 0px\" width=600px>\n",
    "\n",
    "- FAISS: Meta 开源的向量检索引擎 https://github.com/facebookresearch/faiss\n",
    "- Pinecone: 商用向量数据库，只有云服务 https://www.pinecone.io/\n",
    "- **Milvus**: 开源向量数据库，同时有云服务 https://milvus.io/\n",
    "- Weaviate: 开源向量数据库，同时有云服务 https://weaviate.io/\n",
    "- **Qdrant**: 开源向量数据库，同时有云服务 https://qdrant.tech/\n",
    "- PGVector: Postgres 的开源向量检索引擎 https://github.com/pgvector/pgvector\n",
    "- RediSearch: Redis 的开源向量检索引擎 https://github.com/RediSearch/RediSearch\n",
    "- ElasticSearch 也支持向量检索 https://www.elastic.co/enterprise-search/vector-search"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-info\">\n",
    "<b>扩展阅读：https://guangzhengli.com/blog/zh/vector-database</b>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.4 基于向量检索的RAG"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [],
   "source": [
    "class RAG_Bot:\n",
    "    def __init__(self, vector_db, llm_api, n_results=2):\n",
    "        self.vector_db = vector_db\n",
    "        self.llm_api = llm_api\n",
    "        self.n_results = n_results\n",
    "\n",
    "    def chat(self, user_query):\n",
    "        # 1. 检索\n",
    "        search_results = self.vector_db.search(user_query, self.n_results)\n",
    "\n",
    "        # 2. 构建 Prompt\n",
    "        prompt = build_prompt(\n",
    "            prompt_template, context=search_results['documents'][0], query=user_query)\n",
    "\n",
    "        # 3. 调用 LLM\n",
    "        response = self.llm_api(prompt)\n",
    "        return response"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Llama 2 有 7B、13B 和 70B 参数的变体。\n"
     ]
    }
   ],
   "source": [
    "# 创建一个RAG机器人\n",
    "bot = RAG_Bot(\n",
    "    vector_db,\n",
    "    llm_api=get_completion\n",
    ")\n",
    "\n",
    "user_query = \"llama 2有多少参数?\"\n",
    "\n",
    "response = bot.chat(user_query)\n",
    "\n",
    "print(response)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3.5 OpenAI 新发布的两个 Embedding 模型\n",
    "\n",
    "2024 年 1 月 25 日，OpenAI 新发布了两个 Embedding 模型\n",
    "\n",
    "- text-embedding-3-large\n",
    "- text-embedding-3-small\n",
    "\n",
    "其最大特点是，支持自定义的缩短向量维度，从而在几乎不影响最终效果的情况下降低向量检索与相似度计算的复杂度。\n",
    "\n",
    "通俗的说：**越大越准、越小越快。** 官方公布的评测结果:\n",
    "\n",
    "<img src=\"./assets/mteb.png\" style=\"margin-left: 0px\" width=600px>\n",
    "\n",
    "注：[MTEB](https://huggingface.co/blog/mteb) 是一个大规模多任务的 Embedding 模型公开评测集"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "向量维度: 256\n",
      "\n",
      "Query与Documents的余弦距离:\n",
      "0.2780946254748859\n",
      "0.3359874398407345\n",
      "0.12442062921732622\n",
      "0.16765957304055518\n",
      "0.1235534717848908\n",
      "\n",
      "Query与Documents的欧氏距离:\n",
      "1.2015867924548178\n",
      "1.1523996958849365\n",
      "1.3233135541273946\n",
      "1.2902251323704432\n",
      "1.3239686813653393\n"
     ]
    }
   ],
   "source": [
    "model = \"text-embedding-3-large\"\n",
    "dimensions = 256\n",
    "\n",
    "query = \"国际争端\"\n",
    "\n",
    "# 且能支持跨语言\n",
    "# query = \"global conflicts\"\n",
    "\n",
    "documents = [\n",
    "    \"联合国就苏丹达尔富尔地区大规模暴力事件发出警告\",\n",
    "    \"土耳其、芬兰、瑞典与北约代表将继续就瑞典“入约”问题进行谈判\",\n",
    "    \"日本岐阜市陆上自卫队射击场内发生枪击事件 3人受伤\",\n",
    "    \"国家游泳中心（水立方）：恢复游泳、嬉水乐园等水上项目运营\",\n",
    "    \"我国首次在空间站开展舱外辐射生物学暴露实验\",\n",
    "]\n",
    "\n",
    "query_vec = get_embeddings([query], model=model, dimensions=dimensions)[0]\n",
    "doc_vecs = get_embeddings(documents, model=model, dimensions=dimensions)\n",
    "\n",
    "print(\"向量维度: {}\".format(len(query_vec)))\n",
    "\n",
    "print()\n",
    "\n",
    "print(\"Query与Documents的余弦距离:\")\n",
    "for vec in doc_vecs:\n",
    "    print(cos_sim(query_vec, vec))\n",
    "\n",
    "print()\n",
    "\n",
    "print(\"Query与Documents的欧氏距离:\")\n",
    "for vec in doc_vecs:\n",
    "    print(l2(query_vec, vec))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-info\">\n",
    "<b>扩展阅读：这种可变长度的 Embedding 技术背后的原理叫做 <a href=\"https://arxiv.org/abs/2205.13147\">Matryoshka Representation Learning</a> </b>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 四、实战 RAG 系统的进阶知识"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.1 文本分割的粒度"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**缺陷**\n",
    "\n",
    "1. 粒度太大可能导致检索不精准，粒度太小可能导致信息不全面\n",
    "2. 问题的答案可能跨越两个片段"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 创建一个向量数据库对象\n",
    "vector_db = MyVectorDBConnector(\"demo_text_split\", get_embeddings)\n",
    "# 向向量数据库中添加文档\n",
    "vector_db.add_documents(paragraphs)\n",
    "\n",
    "# 创建一个RAG机器人\n",
    "bot = RAG_Bot(\n",
    "    vector_db,\n",
    "    llm_api=get_completion\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " In this work, we develop and release Llama 2, a family of pretrained and ﬁne-tuned LLMs, Llama 2 and Llama 2-Chat, at scales up to 70B parameters. On the series of helpfulness and safety benchmarks we tested, Llama 2-Chat models generally perform better than existing open-source models. They also appear to be on par with some of the closed-source models, at least on the human evaluations we performed (see Figures 1 and 3). We have taken measures to increase the safety of these models, using safety-speciﬁc data annotation and tuning, as well as conducting red-teaming and employing iterative evaluations. Additionally, this paper contributes a thorough description of our ﬁne-tuning methodology and approach to improving LLM safety. We hope that this openness will enable the community to reproduce ﬁne-tuned LLMs and continue to improve the safety of those models, paving the way for more responsible development of LLMs. We also share novel observations we made during the development of Llama 2 and Llama 2-Chat, such as the emergence of tool usage and temporal organization of knowledge.\n",
      "\n",
      " 2. Llama 2-Chat, a ﬁne-tuned version of Llama 2 that is optimized for dialogue use cases. We release\n",
      "\n",
      "====回复====\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "'Llama 2-Chat的参数规模最高可达700亿。'"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# user_query = \"llama 2有商用许可协议吗\"\n",
    "user_query=\"llama 2 chat有多少参数\"\n",
    "search_results = vector_db.search(user_query, 2)\n",
    "\n",
    "for doc in search_results['documents'][0]:\n",
    "    print(doc+\"\\n\")\n",
    "\n",
    "print(\"====回复====\")\n",
    "bot.chat(user_query)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      " Figure 1: Helpfulness human evaluation results for Llama 2-Chat compared to other open-source and closed-source models. Human raters compared model generations on ~4k prompts consisting of both single and multi-turn prompts. The 95% conﬁdence intervals for this evaluation are between 1% and 2%. More details in Section 3.4.2. While reviewing these results, it is important to note that human evaluations can be noisy due to limitations of the prompt set, subjectivity of the review guidelines, subjectivity of individual raters, and the inherent diﬃculty of comparing generations.\n",
      "\n",
      " Figure 2: Win-rate % for helpfulness andsafety between commercial-licensed baselines and Llama 2-Chat, according to GPT 4. To complement the human evaluation, we used a more capable model, not subject to our own guidance. Green area indicates our model is better according to GPT-4. To remove ties, we used win/(win + loss). The orders in which the model responses are presented to GPT-4 are randomly swapped to alleviate bias.\n",
      "\n",
      " 1 Introduction\n",
      "\n",
      " Large Language Models (LLMs) have shown great promise as highly capable AI assistants that excel in complex reasoning tasks requiring expert knowledge across a wide range of ﬁelds, including in specialized domains such as programming and creative writing. They enable interaction with humans through intuitive chat interfaces, which has led to rapid and widespread adoption among the general public.\n",
      "\n",
      " The capabilities of LLMs are remarkable considering the seemingly straightforward nature of the training methodology. Auto-regressive transformers are pretrained on an extensive corpus of self-supervised data, followed by alignment with human preferences via techniques such as Reinforcement Learning with Human Feedback (RLHF). Although the training methodology is simple, high computational requirements have limited the development of LLMs to a few players. There have been public releases of pretrained LLMs (such as BLOOM (Scao et al., 2022), LLaMa-1 (Touvron et al., 2023), and Falcon (Penedo et al., 2023)) that match the performance of closed pretrained competitors like GPT-3 (Brown et al., 2020) and Chinchilla (Hoﬀmann et al., 2022), but none of these models are suitable substitutes for closed “product” LLMs, such as ChatGPT, BARD, and Claude. These closed product LLMs are heavily ﬁne-tuned to align with human preferences, which greatly enhances their usability and safety. This step can require signiﬁcant costs in compute and human annotation, and is often not transparent or easily reproducible, limiting progress within the community to advance AI alignment research.\n",
      "\n",
      " In this work, we develop and release Llama 2, a family of pretrained and ﬁne-tuned LLMs, Llama 2 and Llama 2-Chat, at scales up to 70B parameters. On the series of helpfulness and safety benchmarks we tested, Llama 2-Chat models generally perform better than existing open-source models. They also appear to be on par with some of the closed-source models, at least on the human evaluations we performed (see Figures 1 and 3). We have taken measures to increase the safety of these models, using safety-speciﬁc data annotation and tuning, as well as conducting red-teaming and employing iterative evaluations. Additionally, this paper contributes a thorough description of our ﬁne-tuning methodology and approach to improving LLM safety. We hope that this openness will enable the community to reproduce ﬁne-tuned LLMs and continue to improve the safety of those models, paving the way for more responsible development of LLMs. We also share novel observations we made during the development of Llama 2 and Llama 2-Chat, such as the emergence of tool usage and temporal organization of knowledge.\n",
      "\n",
      "Figure 3: Safety human evaluation results for Llama 2-Chat compared to other open-source and closed source models. Human raters judged model generations for safety violations across ~2,000 adversarial prompts consisting of both single and multi-turn prompts. More details can be found in Section 4.4. It is important to caveat these safety results with the inherent bias of LLM evaluations due to limitations of the prompt set, subjectivity of the review guidelines, and subjectivity of individual raters. Additionally, these safety evaluations are performed using content standards that are likely to be biased towards the Llama 2-Chat models.\n",
      "\n",
      " We are releasing the following models to the general public for research and commercial use‡:\n",
      "\n",
      " 1. Llama 2, an updated version of Llama 1, trained on a new mix of publicly available data. We also increased the size of the pretraining corpus by 40%, doubled the context length of the model, and adopted grouped-query attention (Ainslie et al., 2023). We are releasing variants of Llama 2 with 7B, 13B, and 70B parameters. We have also trained 34B variants, which we report on in this paper but are not releasing.§\n",
      "\n",
      " 2. Llama 2-Chat, a ﬁne-tuned version of Llama 2 that is optimized for dialogue use cases. We release\n",
      "\n",
      " variants of this model with 7B, 13B, and 70B parameters as well.\n",
      "\n",
      " We believe that the open release of LLMs, when done safely, will be a net beneﬁt to society. Like all LLMs, Llama 2 is a new technology that carries potential risks with use (Bender et al., 2021b; Weidinger et al., 2021; Solaiman et al., 2023). Testing conducted to date has been in English and has not — and could not — cover all scenarios. Therefore, before deploying any applications of Llama 2-Chat, developers should perform safety testing and tuning tailored to their speciﬁc applications of the model. We provide a responsible use guide¶ and code examples‖ to facilitate the safe deployment of Llama 2 and Llama 2-Chat. More details of our responsible release strategy can be found in Section 5.3.\n",
      "\n",
      " The remainder of this paper describes our pretraining methodology (Section 2), ﬁne-tuning methodology (Section 3), approach to model safety (Section 4), key observations and insights (Section 5), relevant related work (Section 6), and conclusions (Section 7).\n",
      "\n",
      " ‡https://ai.meta.com/resources/models-and-libraries/llama/ §We are delaying the release of the 34B model due to a lack of time to suﬃciently red team. ¶https://ai.meta.com/llama ‖https://github.com/facebookresearch/llama\n",
      "\n"
     ]
    }
   ],
   "source": [
    "for p in paragraphs:\n",
    "    print(p+\"\\n\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**改进**: 按一定粒度，部分重叠式的切割文本，使上下文更完整"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# !pip install nltk"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [],
   "source": [
    "from nltk.tokenize import sent_tokenize\n",
    "import json\n",
    "\n",
    "\n",
    "# chunk_size 一般根据文档内容或大小来设置\n",
    "# overlap_size 一般设置 chunk_size 大小的10%-20%之间\n",
    "def split_text(paragraphs, chunk_size=300, overlap_size=100):\n",
    "    '''按指定 chunk_size 和 overlap_size 交叠割文本'''\n",
    "    sentences = [s.strip() for p in paragraphs for s in sent_tokenize(p)]\n",
    "    chunks = []\n",
    "    i = 0\n",
    "    while i < len(sentences):\n",
    "        chunk = sentences[i]\n",
    "        overlap = ''\n",
    "        prev_len = 0\n",
    "        prev = i - 1\n",
    "        # 向前计算重叠部分\n",
    "        while prev >= 0 and len(sentences[prev])+len(overlap) <= overlap_size:\n",
    "            overlap = sentences[prev] + ' ' + overlap\n",
    "            prev -= 1\n",
    "        chunk = overlap+chunk\n",
    "        next = i + 1\n",
    "        # 向后计算当前chunk\n",
    "        while next < len(sentences) and len(sentences[next])+len(chunk) <= chunk_size:\n",
    "            chunk = chunk + ' ' + sentences[next]\n",
    "            next += 1\n",
    "        chunks.append(chunk)\n",
    "        i = next\n",
    "    return chunks"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-info\">\n",
    "此处 sent_tokenize 为针对英文的实现，针对中文的实现请参考 chinese_utils.py\n",
    "</div>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [],
   "source": [
    "chunks = split_text(paragraphs, 300, 100)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 创建一个向量数据库对象\n",
    "vector_db = MyVectorDBConnector(\"demo_text_split\", get_embeddings)\n",
    "# 向向量数据库中添加文档\n",
    "vector_db.add_documents(chunks)\n",
    "# 创建一个RAG机器人\n",
    "bot = RAG_Bot(\n",
    "    vector_db,\n",
    "    llm_api=get_completion\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2. Llama 2-Chat, a ﬁne-tuned version of Llama 2 that is optimized for dialogue use cases. We release variants of this model with 7B, 13B, and 70B parameters as well. We believe that the open release of LLMs, when done safely, will be a net beneﬁt to society.\n",
      "\n",
      "In this work, we develop and release Llama 2, a family of pretrained and ﬁne-tuned LLMs, Llama 2 and Llama 2-Chat, at scales up to 70B parameters. On the series of helpfulness and safety benchmarks we tested, Llama 2-Chat models generally perform better than existing open-source models.\n",
      "\n",
      "====回复====\n",
      "Llama 2-Chat 有 7B、13B 和 70B 三种参数规模的版本。\n"
     ]
    }
   ],
   "source": [
    "# user_query = \"llama 2有商用许可协议吗\"\n",
    "user_query=\"llama 2 chat有多少参数\"\n",
    "\n",
    "search_results = vector_db.search(user_query, 2)\n",
    "for doc in search_results['documents'][0]:\n",
    "    print(doc+\"\\n\")\n",
    "\n",
    "response = bot.chat(user_query)\n",
    "print(\"====回复====\")\n",
    "print(response)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.2 检索后排序"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**问题**: 有时，最合适的答案不一定排在检索的最前面"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "We believe that the open release of LLMs, when done safely, will be a net beneﬁt to society. Like all LLMs, Llama 2 is a new technology that carries potential risks with use (Bender et al., 2021b; Weidinger et al., 2021; Solaiman et al., 2023).\n",
      "\n",
      "We also share novel observations we made during the development of Llama 2 and Llama 2-Chat, such as the emergence of tool usage and temporal organization of knowledge. Figure 3: Safety human evaluation results for Llama 2-Chat compared to other open-source and closed source models.\n",
      "\n",
      "In this work, we develop and release Llama 2, a family of pretrained and ﬁne-tuned LLMs, Llama 2 and Llama 2-Chat, at scales up to 70B parameters. On the series of helpfulness and safety benchmarks we tested, Llama 2-Chat models generally perform better than existing open-source models.\n",
      "\n",
      "Additionally, these safety evaluations are performed using content standards that are likely to be biased towards the Llama 2-Chat models. We are releasing the following models to the general public for research and commercial use‡: 1.\n",
      "\n",
      "We provide a responsible use guide¶ and code examples‖ to facilitate the safe deployment of Llama 2 and Llama 2-Chat. More details of our responsible release strategy can be found in Section 5.3.\n",
      "\n",
      "====回复====\n",
      "我无法回答您的问题。\n"
     ]
    }
   ],
   "source": [
    "user_query = \"how safe is llama 2\"\n",
    "search_results = vector_db.search(user_query, 5)\n",
    "\n",
    "for doc in search_results['documents'][0]:\n",
    "    print(doc+\"\\n\")\n",
    "\n",
    "response = bot.chat(user_query)\n",
    "print(\"====回复====\")\n",
    "print(response)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**方案**:\n",
    "\n",
    "1. 检索时过招回一部分文本\n",
    "2. 通过一个排序模型对 query 和 document 重新打分排序\n",
    "\n",
    "<img src=\"./assets/sbert-rerank.png\" style=\"margin-left: 0px\" width=600px>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-danger\">\n",
    "以下代码运行前要确保能访问 Hugging Face！\n",
    "</div>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# !pip install sentence_transformers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sentence_transformers import CrossEncoder\n",
    "\n",
    "model = CrossEncoder('cross-encoder/ms-marco-MiniLM-L-6-v2', max_length=512) # 英文，模型较小\n",
    "# model = CrossEncoder('BAAI/bge-reranker-large', max_length=512) # 多语言，国产，模型较大"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "6.613734722137451\tWe believe that the open release of LLMs, when done safely, will be a net beneﬁt to society. Like all LLMs, Llama 2 is a new technology that carries potential risks with use (Bender et al., 2021b; Weidinger et al., 2021; Solaiman et al., 2023).\n",
      "\n",
      "5.310717582702637\tIn this work, we develop and release Llama 2, a family of pretrained and ﬁne-tuned LLMs, Llama 2 and Llama 2-Chat, at scales up to 70B parameters. On the series of helpfulness and safety benchmarks we tested, Llama 2-Chat models generally perform better than existing open-source models.\n",
      "\n",
      "4.709955215454102\tWe provide a responsible use guide¶ and code examples‖ to facilitate the safe deployment of Llama 2 and Llama 2-Chat. More details of our responsible release strategy can be found in Section 5.3.\n",
      "\n",
      "4.5439653396606445\tWe also share novel observations we made during the development of Llama 2 and Llama 2-Chat, such as the emergence of tool usage and temporal organization of knowledge. Figure 3: Safety human evaluation results for Llama 2-Chat compared to other open-source and closed source models.\n",
      "\n",
      "4.0338897705078125\tAdditionally, these safety evaluations are performed using content standards that are likely to be biased towards the Llama 2-Chat models. We are releasing the following models to the general public for research and commercial use‡: 1.\n",
      "\n"
     ]
    }
   ],
   "source": [
    "user_query = \"how safe is llama 2\"\n",
    "# user_query = \"llama 2安全性如何\"\n",
    "scores = model.predict([(user_query, doc) for doc in search_results['documents'][0]])\n",
    "# 按得分排序\n",
    "sorted_list = sorted(zip(scores, search_results['documents'][0]), key=lambda x: x[0], reverse=True)\n",
    "for score, doc in sorted_list:\n",
    "    print(f\"{score}\\t{doc}\\n\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 一些 Rerank 的 API 服务 \n",
    "\n",
    "- [Cohere Rerank](https://cohere.com/rerank)：支持多语言\n",
    "- [Jina Rerank](https://jina.ai/reranker/)：目前只支持英文"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4.3 混合检索（Hybrid Search）（选）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在**实际生产**中，传统的关键字检索（稀疏表示）与向量检索（稠密表示）各有优劣。\n",
    "\n",
    "举个具体例子，比如文档中包含很长的专有名词，关键字检索往往更精准而向量检索容易引入概念混淆。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Cosine distance:\n",
      "0.8915956814209096\n",
      "0.8902380296876382\n",
      "0.9043403228477503\n",
      "0.9136486327152477\n"
     ]
    }
   ],
   "source": [
    "# 背景说明：在医学中“小细胞肺癌”和“非小细胞肺癌”是两种不同的癌症\n",
    "\n",
    "query = \"非小细胞肺癌的患者\"\n",
    "\n",
    "documents = [\n",
    "    \"玛丽患有肺癌，癌细胞已转移\",\n",
    "    \"刘某肺癌I期\",\n",
    "    \"张某经诊断为非小细胞肺癌III期\",\n",
    "    \"小细胞肺癌是肺癌的一种\"\n",
    "]\n",
    "\n",
    "query_vec = get_embeddings([query])[0]\n",
    "doc_vecs = get_embeddings(documents)\n",
    "\n",
    "print(\"Cosine distance:\")\n",
    "for vec in doc_vecs:\n",
    "    print(cos_sim(query_vec, vec))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "所以，有时候我们需要结合不同的检索算法，来达到比单一检索算法更优的效果。这就是**混合检索**。\n",
    "\n",
    "混合检索的核心是，综合文档 $d$ 在不同检索算法下的排序名次（rank），为其生成最终排序。\n",
    "\n",
    "一个最常用的算法叫 **Reciprocal Rank Fusion（RRF）**\n",
    "\n",
    "$rrf(d)=\\sum_{a\\in A}\\frac{1}{k+rank_a(d)}$\n",
    "\n",
    "其中 $A$ 表示所有使用的检索算法的集合，$rank_a(d)$ 表示使用算法 $a$ 检索时，文档 $d$ 的排序，$k$ 是个常数。\n",
    "\n",
    "很多向量数据库都支持混合检索，比如 [Weaviate](https://weaviate.io/blog/hybrid-search-explained)、[Pinecone](https://www.pinecone.io/learn/hybrid-search-intro/) 等。也可以根据上述原理自己实现。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 4.3.1 手写个简单的例子"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div class=\"alert alert-danger\">\n",
    "注意：需要安装好 Elastic Search Server，并启动！\n",
    "</div>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# !pip install elasticsearch7"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1. 基于关键字检索的排序"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import time\n",
    "\n",
    "\n",
    "class MyEsConnector:\n",
    "    def __init__(self, es_client, index_name, keyword_fn):\n",
    "        self.es_client = es_client\n",
    "        self.index_name = index_name\n",
    "        self.keyword_fn = keyword_fn\n",
    "\n",
    "    def add_documents(self, documents):\n",
    "        '''文档灌库'''\n",
    "        if self.es_client.indices.exists(index=self.index_name):\n",
    "            self.es_client.indices.delete(index=self.index_name)\n",
    "        self.es_client.indices.create(index=self.index_name)\n",
    "        actions = [\n",
    "            {\n",
    "                \"_index\": self.index_name,\n",
    "                \"_source\": {\n",
    "                    \"keywords\": self.keyword_fn(doc),\n",
    "                    \"text\": doc,\n",
    "                    \"id\": f\"doc_{i}\"\n",
    "                }\n",
    "            }\n",
    "            for i, doc in enumerate(documents)\n",
    "        ]\n",
    "        helpers.bulk(self.es_client, actions)\n",
    "        time.sleep(1)\n",
    "\n",
    "    def search(self, query_string, top_n=3):\n",
    "        '''检索'''\n",
    "        search_query = {\n",
    "            \"match\": {\n",
    "                \"keywords\": self.keyword_fn(query_string)\n",
    "            }\n",
    "        }\n",
    "        res = self.es_client.search(\n",
    "            index=self.index_name, query=search_query, size=top_n)\n",
    "        return {\n",
    "            hit[\"_source\"][\"id\"]: {\n",
    "                \"text\": hit[\"_source\"][\"text\"],\n",
    "                \"rank\": i,\n",
    "            }\n",
    "            for i, hit in enumerate(res[\"hits\"][\"hits\"])\n",
    "        }"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from chinese_utils import to_keywords  # 使用中文的关键字提取函数\n",
    "\n",
    "# 引入配置文件\n",
    "ELASTICSEARCH_BASE_URL = os.getenv('ELASTICSEARCH_BASE_URL')\n",
    "ELASTICSEARCH_PASSWORD = os.getenv('ELASTICSEARCH_PASSWORD')\n",
    "ELASTICSEARCH_NAME= os.getenv('ELASTICSEARCH_NAME')\n",
    "\n",
    "es = Elasticsearch(\n",
    "    hosts=[ELASTICSEARCH_BASE_URL],\n",
    "    http_auth=(ELASTICSEARCH_NAME, ELASTICSEARCH_PASSWORD),  # 用户名，密码\n",
    ")\n",
    "\n",
    "\n",
    "# 创建 ES 连接器\n",
    "es_connector = MyEsConnector(es, \"demo_es_rrf\", to_keywords)\n",
    "\n",
    "# 文档灌库\n",
    "es_connector.add_documents(documents)\n",
    "\n",
    "# 关键字检索\n",
    "keyword_search_results = es_connector.search(query, 3)\n",
    "\n",
    "print(json.dumps(keyword_search_results, indent=4, ensure_ascii=False))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "2. 基于向量检索的排序"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 创建向量数据库连接器\n",
    "vecdb_connector = MyVectorDBConnector(\"demo_vec_rrf\", get_embeddings)\n",
    "\n",
    "# 文档灌库\n",
    "vecdb_connector.add_documents(documents)\n",
    "\n",
    "# 向量检索\n",
    "vector_search_results = {\n",
    "    \"doc_\"+str(documents.index(doc)): {\n",
    "        \"text\": doc,\n",
    "        \"rank\": i\n",
    "    }\n",
    "    for i, doc in enumerate(\n",
    "        vecdb_connector.search(query, 3)[\"documents\"][0]\n",
    "    )\n",
    "}  # 把结果转成跟上面关键字检索结果一样的格式\n",
    "\n",
    "print(json.dumps(vector_search_results, indent=4, ensure_ascii=False))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "3. 基于 RRF 的融合排序\n",
    "\n",
    "参考资料：https://learn.microsoft.com/zh-cn/azure/search/hybrid-search-ranking"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def rrf(ranks, k=1):\n",
    "    ret = {}\n",
    "    # 遍历每次的排序结果\n",
    "    for rank in ranks:\n",
    "        # 遍历排序中每个元素\n",
    "        for id, val in rank.items():\n",
    "            if id not in ret:\n",
    "                ret[id] = {\"score\": 0, \"text\": val[\"text\"]}\n",
    "            # 计算 RRF 得分\n",
    "            ret[id][\"score\"] += 1.0/(k+val[\"rank\"])\n",
    "    # 按 RRF 得分排序，并返回\n",
    "    return dict(sorted(ret.items(), key=lambda item: item[1][\"score\"], reverse=True))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import json\n",
    "\n",
    "# 融合两次检索的排序结果\n",
    "reranked = rrf([keyword_search_results, vector_search_results])\n",
    "\n",
    "print(json.dumps(reranked, indent=4, ensure_ascii=False))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 五、PDF 文档中的表格怎么处理"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<img src=\"./assets/table_rag.png\" style=\"margin-left: 0px\" width=\"800px\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1. 将每页 PDF 转成图片"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# !pip install PyMuPDF\n",
    "# !pip install matplotlib"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import fitz\n",
    "from PIL import Image\n",
    "\n",
    "def pdf2images(pdf_file):\n",
    "    '''将 PDF 每页转成一个 PNG 图像'''\n",
    "    # 保存路径为原 PDF 文件名（不含扩展名）\n",
    "    output_directory_path, _ = os.path.splitext(pdf_file)\n",
    "    \n",
    "    if not os.path.exists(output_directory_path):\n",
    "        os.makedirs(output_directory_path)\n",
    "    \n",
    "    # 加载 PDF 文件\n",
    "    pdf_document = fitz.open(pdf_file)\n",
    "    \n",
    "    # 每页转一张图\n",
    "    for page_number in range(pdf_document.page_count):\n",
    "        # 取一页\n",
    "        page = pdf_document[page_number]\n",
    "    \n",
    "        # 转图像\n",
    "        pix = page.get_pixmap()\n",
    "    \n",
    "        # 从位图创建 PNG 对象\n",
    "        image = Image.frombytes(\"RGB\", [pix.width, pix.height], pix.samples)\n",
    "    \n",
    "        # 保存 PNG 文件\n",
    "        image.save(f\"./{output_directory_path}/page_{page_number + 1}.png\")\n",
    "    \n",
    "    # 关闭 PDF 文件\n",
    "    pdf_document.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {},
   "outputs": [],
   "source": [
    "from PIL import Image\n",
    "import os\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "def show_images(dir_path):\n",
    "    '''显示目录下的 PNG 图像'''\n",
    "    for file in os.listdir(dir_path):\n",
    "        if file.endswith('.png'):\n",
    "            # 打开图像\n",
    "            img = Image.open(os.path.join(dir_path, file)) \n",
    "\n",
    "            # 显示图像\n",
    "            plt.imshow(img)\n",
    "            plt.axis('off')  # 不显示坐标轴\n",
    "            plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pdf2images(\"llama2_page8.pdf\")\n",
    "show_images(\"llama2_page8\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "2. 识别文档（图片）中的表格"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [],
   "source": [
    "class MaxResize(object):\n",
    "    '''缩放图像'''\n",
    "    def __init__(self, max_size=800):\n",
    "        self.max_size = max_size\n",
    "\n",
    "    def __call__(self, image):\n",
    "        width, height = image.size\n",
    "        current_max_size = max(width, height)\n",
    "        scale = self.max_size / current_max_size\n",
    "        resized_image = image.resize(\n",
    "            (int(round(scale * width)), int(round(scale * height)))\n",
    "        )\n",
    "\n",
    "        return resized_image"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# !pip install torchvision\n",
    "# !pip install transformers\n",
    "# !pip install timm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torchvision.transforms as transforms\n",
    "\n",
    "# 图像预处理\n",
    "detection_transform = transforms.Compose(\n",
    "    [\n",
    "        MaxResize(800),\n",
    "        # 将原始的PILImage格式的数据格式化为可被pytorch快速处理的张量类型\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]),\n",
    "    ]\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from transformers import AutoModelForObjectDetection\n",
    "\n",
    "# 加载 TableTransformer 模型\n",
    "model = AutoModelForObjectDetection.from_pretrained(\n",
    "    \"microsoft/table-transformer-detection\"\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 识别后的坐标换算与后处理\n",
    "\n",
    "def box_cxcywh_to_xyxy(x):\n",
    "    '''坐标转换'''\n",
    "    x_c, y_c, w, h = x.unbind(-1)\n",
    "    b = [(x_c - 0.5 * w), (y_c - 0.5 * h), (x_c + 0.5 * w), (y_c + 0.5 * h)]\n",
    "    return torch.stack(b, dim=1)\n",
    "\n",
    "\n",
    "def rescale_bboxes(out_bbox, size):\n",
    "    '''区域缩放'''\n",
    "    width, height = size\n",
    "    boxes = box_cxcywh_to_xyxy(out_bbox)\n",
    "    boxes = boxes * torch.tensor(\n",
    "        [width, height, width, height], dtype=torch.float32\n",
    "    )\n",
    "    return boxes\n",
    "\n",
    "\n",
    "def outputs_to_objects(outputs, img_size, id2label):\n",
    "    '''从模型输出中取定位框坐标'''\n",
    "    m = outputs.logits.softmax(-1).max(-1)\n",
    "    pred_labels = list(m.indices.detach().cpu().numpy())[0]\n",
    "    pred_scores = list(m.values.detach().cpu().numpy())[0]\n",
    "    pred_bboxes = outputs[\"pred_boxes\"].detach().cpu()[0]\n",
    "    pred_bboxes = [\n",
    "        elem.tolist() for elem in rescale_bboxes(pred_bboxes, img_size)\n",
    "    ]\n",
    "\n",
    "    objects = []\n",
    "    for label, score, bbox in zip(pred_labels, pred_scores, pred_bboxes):\n",
    "        class_label = id2label[int(label)]\n",
    "        if not class_label == \"no object\":\n",
    "            objects.append(\n",
    "                {\n",
    "                    \"label\": class_label,\n",
    "                    \"score\": float(score),\n",
    "                    \"bbox\": [float(elem) for elem in bbox],\n",
    "                }\n",
    "            )\n",
    "\n",
    "    return objects"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "\n",
    "# 识别表格，并将表格部分单独存为图像文件\n",
    "\n",
    "def detect_and_crop_save_table(file_path):\n",
    "    # 加载图像（PDF页）    \n",
    "    image = Image.open(file_path)\n",
    "\n",
    "    filename, _ = os.path.splitext(os.path.basename(file_path))\n",
    "\n",
    "    # 输出路径\n",
    "    cropped_table_directory = os.path.join(os.path.dirname(file_path), \"table_images\")\n",
    "\n",
    "    if not os.path.exists(cropped_table_directory):\n",
    "        os.makedirs(cropped_table_directory)\n",
    "\n",
    "    # 预处理\n",
    "    pixel_values = detection_transform(image).unsqueeze(0)\n",
    "\n",
    "    # 识别表格\n",
    "    with torch.no_grad():\n",
    "        outputs = model(pixel_values)\n",
    "\n",
    "    # 后处理，得到表格子区域\n",
    "    id2label = model.config.id2label\n",
    "    id2label[len(model.config.id2label)] = \"no object\"\n",
    "    detected_tables = outputs_to_objects(outputs, image.size, id2label)\n",
    "\n",
    "    print(f\"number of tables detected {len(detected_tables)}\")\n",
    "\n",
    "    for idx in range(len(detected_tables)):\n",
    "        # 将识别从的表格区域单独存为图像\n",
    "        cropped_table = image.crop(detected_tables[idx][\"bbox\"])\n",
    "        cropped_table.save(os.path.join(cropped_table_directory,f\"{filename}_{idx}.png\"))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "number of tables detected 2\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgMAAADRCAYAAABRsrFaAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjAsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvlHJYcgAAAAlwSFlzAAAPYQAAD2EBqD+naQABAABJREFUeJzsvXd4nNWZ/v+Z3qUZ9V4tSy6Sey+40QlgCISWAglkF0iDb5Ld7GbzS3aTTdls2F0SWCCEJECAgEO1DRgbN7nKslwkq/c+oxlN7/P7w9d7diQXbCOBbea+Ll+2523nPe85z3nOU+5HFovFYiSQQAIJJJBAAp9ZyD/tBiSQQAIJJJBAAp8uEspAAgkkkEACCXzGkVAGEkgggQQSSOAzjoQykEACCSSQQAKfcSSUgQQSSCCBBBL4jCOhDCSQQAIJJJDAZxwJZSCBBBJIIIEEPuNIKAMJJJBAAgkk8BlHQhlIIIEEEkgggc84lJ92AxL45BGNRnG5XLS0tOB0OikoKCArKwu9Xo9MJvu0m3fRwul04nQ68Xq9qNVqCgsLiUQi+P1+5HI5arUaq9XK6Ogo6enpGI1G1Gr1Ge8XjUY5ceIEDoeDKVOmkJGRAUAsFmNgYICGhgYKCwspLS39pF7xrPB6vXR1dSGXy4lEIhgMBpKTk0lOTr7ge/b19TE0NEQoFGLBggUT2NoEEkjgfJCwDHzGYLPZ2Lt3L9u2bUMmk5Gamkp3dzeHDh2ivb39027eRQ2ZTEZNTQ2vvvoqNpsNgBMnTrB7924aGhqQyWQoFAo++OADvF7vOSlWkUiEbdu20dvbO+Z3jUbDtm3baGpqmpR3uRAEg0G6urr44x//iN1up66ujrfffpu33377gu8ZjUbp7u5m+/btxGIxhoeH6ejowOFwTFzDE0gggY9EQhn4jCAWixGLxdi/fz/19fUEAgHS09MpKChAp9Ph9XrxeDzEYjEikQgul4twOCyui0QiBINBfD4foVCIaDRKJBLB5/MhlbeIRqOEw2FxXiQSIRaLEQwGCQQCY9oTDofx+Xx4vV7xjGAwSCQSIRQK4fP5xpwf/2wJ0rmhUGjMPQKBAMFgkHA4LM6NRqMEAgHR3lgsJn6Lv+fZoFarGRkZoampSSxWJ06cYMeOHdTX1wMnFYaBgQFxTSAQEP0qPVPqo0AggMFgoLm5mdHRUfGdwuEwCoWCtrY2rFbrOX7hTwbhcJi9e/ei1WqJRqM0NzezZcsWcVzqz2g0CiC+SSgUIhKJjLmX3+9HJpPhdruF0hMMBvF4PGIs+P1+IpEIgUBgzPWxWOyUZyWQQAIXjoSb4DOEYDDIyy+/zJIlS7j55pvRaDQALFq0CJvNhkwmIxgM4nQ6sVqtJCUlkZycjFwux+Vy4ff7CYVCqNVq9Ho9crkcq9VKTk4Oer0el8slBHk4HEar1WIymXC5XEQiEdLS0tDr9QQCAdxuN263m3A4TEpKCklJSXR1dWE0GgFwuVxkZGSQlJSE3+8Xz1epVGRlZeH3+8WCGovFSEpKIhAIYLfbkcvlKBQK5HK5ML17vV6cTieRSIT09HRUKpW4r1wux2QyYTAYztp/Go2GkpIShoaGsFqtRKNR+vv7OXbsGGq1mmAwiMvlYtasWajVatEfPp+PtLQ0zGaz+E3qy9TUVOTykzp5OBwWfePz+cR7XCxQqVRkZmZiNBrJyMggPT0dq9VKa2srsVgMj8eD2+1GJpOh1WoxGAyEQiEcDgfhcBiDwUBSUhIKhQKPx4Pdbsfv9xNfK02j0ZCUlIRSqcTpdNLf3092djY2m43U1FSMRiNyuVwor9I40+l0aLXai6q/EkjgUkJCGfgMobGxEY1GQ3JyslAEJKSmpjIyMkJNTQ1vv/02t99+O//0T//EypUrSUlJ4bXXXiMYDDJv3jy2bdtGVlYWFRUVDA4OYrFYePDBB3n++efZv38/SqWSmTNn8te//pVrr72WWCyG3+8nKyuL73znO7z99ts4nU6SkpIIh8O8/PLL/PSnP+Xee+9l9uzZFBcXMzo6is1m4/HHH+eVV14hJSUFvV5PdXU1//zP/8ybb76JXq/H5/Nht9tJSkqivr6ew4cPM336dGKxGA0NDfz6178G4NChQ2g0GkwmE9XV1ZSXl1NTU0NmZiYjIyPYbDYeffTRj+zD3NxcCgoKqKmpYfny5eTm5lJaWopSqRSulquuuop9+/Zhs9lQq9WYzWYeeeQRnnvuOZ577jkOHz6M0+nE7/fzzDPPiMWws7OTXbt2oVKpsNvtNDY2smzZsokfCBOAd955B7vdTlpaGj/4wQ+IRqM8/vjjLFmyhOPHj+Pz+bjuuuuora1FqVTy1ltvMX36dL7whS+QnZ3NE088QUFBAR0dHbS1tQEnlaEf/ehH5OXlUVJSwsDAAI8//jjf+9732L59O3PmzGHlypXk5eXx5JNPcs011/DMM88QDoeZM2cOt9xyCwUFBZ9yzySQwKWJhDLwGUIsFsPpdJ5igpdw9OhRNm3axM0338zMmTNZtWoVPT09DA0NsXr1avx+P1/84hcZGhqipKSE9evXo1AouPPOO/n6179OVVUVer0enU7HLbfcwo4dO7j22muZMmUKR44c4be//S3f+c53ePLJJ/nxj3/MggULaGtrY8OGDXR3d5OXl8c111zD6tWrGRkZ4d577yUWi3H48GE8Hg/l5eWsWrUKgKeffpqrr76akpISNBoNe/bs4fOf/zyRSIRrr72WjIwMdu7cya5duygqKmLjxo2kpaWxcuVKlixZwo9+9CPmzJlDIBBgeHiY7u7uc+rDnJwcCgoKeOqpp9i4cSM33ngjWVlZHD16lHfeeYfc3FxSUlL4y1/+wnXXXcett96K2+3mmWeeYe/evZSWlmIwGJDJZNx9992Ew2Hkcjkej4empib279/Pb37zG2KxGIcOHSIpKWmiPv+EwufzMTQ0RFpaGsXFxbS0tLB161YyMjJQKpUoFAqOHj3Kddddx969eykpKUGhUFBbW8vx48dRKpWsW7cOuVzO9u3b2bhxI0qlkrVr19Lf309xcTF5eXkUFRXxpS99idWrV/PCCy/Q2NiI2Wxmx44d/NM//RMnTpxAqVRSXl5OXl7ep90tCSRwyeKclYHOzk5isRipqamYTKYxx0ZHR3G73USjUdLT09FoNGcNnhoeHsZqteL3+5kzZ84px2OxGENDQzQ2NlJWVkZ2dvZ5vNK5wev10t/fz8jICAaDgfLycuRy+aRG00ejUZxOJ93d3bhcLnJzc8nIyECr1Z71ubFYDK/XS0NDA0lJSeTk5Ahz+vmgsLAQOBnB3dnZKf4vQTJzOxwO5HI56enpjI6OEgqFUKlURCIRNBqN+KPValGr1cI3r1AoUKlUqNVqcVyj0aDX69FoNOI8q9WKx+MhGo2i1WpJTU0VJl61Wo1Wq0Wr1Yp23XXXXfT399Pd3c1f/vIXioqK8Pl8VFRUsHDhQqLRKIsXL8bhcKBUKlGr1eh0OgwGAyMjIxQUFHDvvffS29tLe3s7tbW1hEIhpk6dKu7h9/vPqQ8lk7Tf78fj8aDVapkxYwZdXV0cPXqUgoICZDIZIyMjIu5CrVaTlpYm3kmr1aJSqTAajSJWQIqTGBwcFBkIp/OzXyxYt24db731Fh0dHezYsYPCwkI0Gg2zZ88mMzOTaDRKKBTil7/8JV/84hdxOp243W78fr9QwKT5Fu8mUCqVyGQy5HK5UCrUajXJycninklJSVx55ZW8+uqrWCwWpk6dSn5+vnC3XEqIRCJYrVbcbjeZmZnodLoxrg6fzydceEaj8SMzNwYGBhgaGgKgqqrqnNshxQV1dXWh1WpJSko6RcaMjIzgdruJRCLo9XrcbjdZWVlj3DOSFdBmswlFNxgMIpPJhJtQoVDg9/vp7e0VLjqTyYRCocDhcOByuTCZTJjN5rNm44RCITo6OlAoFCK7JSkpCb1eL+ZfNBpFJpOh0WjEOtLd3U04HEalUmEwGEhJSWF4eBiv10s4HEaj0ZCfn39efef3+4U8G++qkr6JlIVUVFSEWq3GZrMRCoXQaDRYLBaxSZDOleZ+JBJBoVCQnp5+zpuDaDTK8PAwvb29GI1Gpk6d+pHXnPPs8fl8/PGPf6S6uloIMAkffPABmzdvpqGh4ZzuFQqF6O3tZfv27Wc8RyaT8f7779PT03OuTTwnxGIxHA4H+/bto6uri0AgQGtrK42NjYRCITo7O+nr65vQZwLY7XYOHz5MTU0NgUAAtVpNd3c39fX19Pf3f+T1MpmMw4cP09zcjMvluqA2mEwmVq9eDcDmzZvZsWMHDQ0N1NfX09PTg06no7i4mIMHD9Lf34/NZiMzM5Pc3Fz6+/sZHBxkdHQUl8uF1WpleHgYmUyGx+NhZGSEwcFBMfCl8wYGBsTC73a7cTgczJ49m87OTo4cOYLVaiUlJYWUlBSx27Tb7SKQzmq1MjQ0hEKhICUlBTi5YEybNo3e3l4aGxtxOp0YDAZ6e3ux2Wy43W4RVDgwMEB3dzdarZaUlBQh4ObMmUN9fT0dHR14vd5T3CZnglwuR6fTkZWVRX5+Pmq1GpPJhMViITk5WcQozJw5E7fbTU1NDf39/aSkpJCfn4/H42FgYICRkRG8Xi89PT04HA4CgYBQpLZu3crBgwdxOBw4HA7sdvsFfe+JhCTw2tvbsdvtaDQa5s2bR1JSEu+//z42mw2lUklnZyeDg4MEg0FUKhVHjhyho6MDu93OyMgIHo+HwsJCent72bdvH3V1dXR2duJ0OhkdHaWvr4/BwUH6+/sZGBgQyqk0zpxOJx6Ph0AgQENDA0NDQ+KbX4qQgkpfeuklqqurGRwcHHN8z549vP322xw5cuSM9wiFQtTX1xONRoV7rLq6+oLa09bWxssvv8yBAwfGKKI+n09kjgwNDYk279mzh+Hh4TH3qK6u5q233uL48eO43W727t1LdXX1mCDicDhMS0sLmzZtwul0is1QKBRi165d5xTUGw6HaWtrY9OmTfT09HD48GHee+89sQ5t2LCBY8eO0dvby/Hjx3n22WeJRqMMDg6yY8eOMX0Ui8XYsmUL+/btO2V9+yiEQiEOHjw45lpJ3n3wwQf09PQQiURQKpW4XC42bdpENBrl2LFj7N27V2QiSYhGo9TV1fHXv/6V0dFR7HY7+/btO2VsnA0ymQyn00lLS4sIbv4onLMyoNfrefPNN9myZYvw8Ulm5y1btrB9+3a6urpQKk8aG4LB4CkR3XCy4+RyuRCUEqQoa+l8k8lEbW3tKQNtItDa2kpNTQ0ej0fsYnp6egiHwwwMDIjgsEAgIP5Iu7T4qPVziWKWzj9y5Ag1NTX09PSQmppKcXEx4XCYnp4eRkZGxOInaZjSbkm6PhaL0dXVRX9/P16vV9z/XNshpb3deOONFBcX09HRwfHjx+no6KC3t5eRkRHS09NZvHgxTqeT4eFhotEoJSUlVFRUIJfLUalUeL1eLBYLarUaj8eDTCajuLhYRH0rFAoUCgU+n4+cnByxE9Tr9RQUFOB2u7n55puF4uX1epk6dSrp6enk5+cjk8nwer2oVCqmTJmCy+Wivb0dr9dLbm4uy5cvx2KxcNVVV2G32zl27Bg9PT3Y7XYCgYAIUFMoFJjNZjQajVAwDAYD06ZNY+nSpaxZs4a+vj7a2tro7Ow8r6h9k8nE0qVLmTlzJkqlErlcTnZ2NkuXLmXKlCnIZDKuvvpqzGYz7e3t2Gw2ysvLKSgoQKPRCAtKIBDA4XCIQMmcnBxmzZrFkSNHaG1tJTs7G71ej8fjOee2TSbC4TBut1t81wULFlBVVYXL5SIUClFWVkZXVxctLS1CISgtLWVgYIBgMIhCocBoNDJjxgwsFgttbW309vYSi8XIzMzE6/USjUZRq9UEAgHC4bAYMwqFgrS0NAwGA06nk66uLrE7raur4+jRoxetFeVskMvl6PV6PvzwQzZt2iSCMSV5sH37dt59912am5vRaDTEYrExsghOLtTvv/8+kUgEo9FIf38/dXV1wpISb3n5qLbYbDY2btzI7t27GRkZEcf6+/t555132L59O6FQCJ1Ox9atW9m4cSPt7e1jso4+/PBD3n33XTo7O1EoFDQ0NHD8+HHgpPVQWvhsNhvbt28nGAyKeaRWqzl69Chqtfojg0Gj0Sh2u53t27fj9/vp6upi+/bt1NbWotPphJIQDocZGhri8ccfF5kphw8f5vDhw+h0OgAMBgO7d++mvr7+nPsLEN9j3759bNy4EavVSiwWw+fzUV9fz/79+wkGg2RkZFBYWIjZbObo0aMolUohg7u6usZYQHQ6Ha2trbz11lvodDohwyRLo/T94/8t9b8UUC2TyUTwbkdHxzm9yzm7CQoKCli2bBmdnZ1s3bqVWbNmIZPJOHToEGq1muzsbFJTU1EoFITDYYaHh4lEIuh0OsxmM0qlknA4jM1mw+/3C6UBEItgMBgEICkpSUQjx583Udi1axepqank5eVRUFBAfn4+brcbpVJJYWGhaKtkxopEImi1WoxGI0ajkVAohNVqxWKxnFMEcyQS4be//S3XX389d9xxh9iFrlq1iuHhYZRKpTDRj4yMkJOTg06nE88OBAIMDAyInSP8Xwra4OAgycnJwvz2UW6OrKws7rrrLsLhsIh0T09PF+9QVlbG3Llzsdvt3H333ahUKmKx2BiT47/8y7+If8vlcl566SUAKisrxzzrmWeeIRqNIpfLyc3N5ZlnnkEmk5GXlycWEIVCwYoVK4jFYjz++ONiIMtkMv7whz8AkJ+fTyAQQC6Xs3LlSgBuv/12MTkUCgUmk0kEqEnXFxQUcM011wAnXRPSLl561xkzZuB2u1GpVOdFnJOTk8PDDz88xr0zY8YMKioqUKlUAFx55ZUia0Amk7FkyRIAPve5zwGI6xYvXszSpUvFvRcvXiysBJ///OfPuU2TDZlMRkZGBvfccw9f/vKXxXe9+uqrueqqqwBYuXIlw8PDqNVqDAYDKpWKxx57TGSBSO+sUCh47LHH8Hg8qNVqlEqlEMBf//rXxTNjsRjr168nFoshl8v53ve+RygUoquri7S0NNavX08gEOBPf/oTPT09LF68+KKNsTgTJDP5lVdeyTvvvMP06dNZtGgRSqVSuF8lcieNRkMkEmFkZASFQoHBYECj0eDxeHjllVe47777MBgM6HQ6kd3hcDjIzMwUi+2ZIH2bnJwcpk2bxujoKDt37mT9+vUA7NixQxBt5eTkkJSUxFVXXcXbb79NVVUV8+bNO6XNZrMZs9lMVlaWcDFKbVCpVOTm5goFT5LzJpOJKVOmYDQaP1KuKhQKcnNzSU5OpqSkBKPRKFJ59Xo9ZrOZ3Nxcpk+fLjKIIpEImZmZpKenI5PJUKvVQr4nJSWRkZFBZmbmOX8/SQ4rlUp27NjBTTfdRElJCf39/fznf/4n//RP/0R5ebmQ2xaLhYcffhidTkdaWprIppLkBkBycrLou7KyMgCys7ORyWTCtWCxWIRrUa/XYzAYCIfD9PX1kZ2dLdy0ZrN5zObxbDivlXbp0qW88847tLW10dXVRWFhIUeOHCE3N1e8bDAY5Kc//SlLlizBarXS39+PXC7nm9/8Jo8//jg5OTn09fXR0tIiOvO1117DYDDg9XpxOBykpKRw6623nk/TzgsrV67k+9//Pn/+85+ZNWsWc+bMYf369bz55ptC0bn11lt57bXXuOKKK/jpT3/KggULWLZsGXq9npqaGsrLyzlw4ABz584VwvBMOH78uJgc431gaWlpNDQ0UFtbi9/vp6SkhB//+Mfce++9zJgxQ5jxU1NT2b59O6tWrWLhwoUMDAzwzDPPcOWVV/L0008zdepU7rrrrnOOeVAoFCQlJZ0iPGUyGTqdTmjMEs4mSM52LH5Cx583Pu5Eand8+6V/6/V69Hr9Kfce79McLzzi75Wenn7K9VLsw/lCSp2Lv79cLj+lH07X7vHnnE7gxcdLXGyQ2hv/HmfrZ6mvTof4vjnd9z/dsWAwiN1ux263U1ZWRigUYsqUKUQikVPG1KUCmUyGxWJh6dKlOBwOtm/fzooVK0Q2zubNmwFwOBxs2rQJlUrFX/7yF2644QaWLFnC8PAwg4OD/Pa3v+WOO+5gdHSUxsZGnn/+ebZv3866deu4+uqrz9kPfsstt7B582Y2bNjAjTfeKBg2NRrNGPllsVhYtmwZVquVnTt3snTpUv76179y/fXXs3Hjxknpq9Ohs7OTZ555BqfTidFo5Hvf+544tn//fvbs2UNvby/333+/mLc2m42Ojg7+8Ic/iLiVY8eOnVZOnA1DQ0McPHiQm266iYGBARHgGg6H2bdvH9OnTx8zVyQF5qMQjUaxWq389a9/xe/3k5aWRkpKinAfvP7663R1dbFt2zamTp1KYWEh77//Pj6fj7a2Nv7+7//+vJlBz3vbvWLFCrxeL3/4wx+47bbbKC8vp7W1lVAoRDAYpLe3l2PHjvH1r3+dpKQkXnvtNf73f/+XqVOnIpfLWbZsGWq1mgMHDvDyyy8D8Nxzz3HNNdeQl5eHUqlk37593HLLLefbtHPG9OnTeeaZZxgYGKC1tZXq6moaGxu59957qaurIxaLYTabuffee/nb3/5GVVUVV1xxBSqVij/96U/MmDEDn89Hd3c3RUVFH/m8WCyGy+UiEAicIuxkMhm1tbVs3bqV3/zmN2Kit7S00NLSQm1tLb/4xS9QKpU0NzeTm5vL8PAwe/fuFT56yT/V3d19SlDgmXAmpeFswvhiw8dt14Vef659dCn15blgIvvrQu8nBft+5StfYevWrQSDQZYuXUpubu4l3bcA69ev59133+Wdd95hwYIFIlAvfte8du1aDhw4QHFxMV6vl9HRUUpKSsjKyuLee+8VcTFTpkzhzjvvZMmSJfz+979n3rx556wMmM1moWBt3LgRj8fDsmXLaG5uPuXcW2+9lXfeeYdNmzYxd+5c0eaPw/dwvt8xLy9PWDv37t3LI488wvPPPw+cjA2aP38+VquVf/7nf6a8vByz2SxifCRLYiwWo7a29rwDs61WK9u2bcPn82EwGNi2bRsqlYqZM2cKa7ekDPf393PkyBFsNhvXXHPNWd1acrmc5ORkrrjiCvx+P93d3eTn5xMMBikoKGBoaIi+vj6uv/56MjIyiEajYpO4c+dOvF7v5CsDFRUVDA8P895775GVlcXnPvc5BgcHsdvtRKNRfD4f/f39IlraaDQK85HNZkOlUqHT6cZomKOjoxQVFTF79mzC4TCVlZWTOrGtVivp6emkpKSQlpaGTqfj7bffHuOnkvz5hw8f5vbbb6e0tJTW1lb8fj9TpkyhoqKCtLS0czIp5ebmEg6H6e/vFyQq8XC5XCIYT6vVYrFY0Gg02Gw2enp6UCqVwpQmk8lEPEN6ejozZ86kqKgIvV4vAuxOB8mfNDIyIuIyYrEY6enp6HS6S16QfhKQSIokquHU1FR0Oh2jo6PCtJ+amjqhzxwZGWFkZIRAIMD06dM/MutkdHSU3t5eDAYDBQUFkxZh39fXJ3zKZrOZjIyMMa6AyYJcLhdxB1IGk8lkIhgMUldXR1ZWFhkZGZfkeM7OziY7O5u2tjb+9Kc/jXEfwcmx8Pzzz3PdddcxMDCAXC4XUfGSpU/6t1qtJikpiaysLBElf66Qy+XMmDEDtVrNa6+9xsKFC0lJSUGr1Z6ygOXk5JCVlcWBAwd4/vnnhTvsbPB4PAwNDaHT6ejr6xPuYSlubHR09Lz89iqViqSkJDQaDampqWPizDQaDWazGZlMJuJ0YrGYiNuJt4yq1erzmi82mw2fzyfcJBUVFTz55JMi66Kqqopdu3axfPlydDqdcEM89dRT3HjjjR/5LJVKRVpaGpFIRLjcpdik9957j/z8fMxmMz6fj/b2durr67n66qt54YUXLmj8n/Ob9/b2Mjw8jEajISsrC4vFgtPpxGKx4PV6RYEWpVKJSqWip6eH7u5uFAoFVVVV5OTkiOIrTU1N9PX14fV68Xq9FBYWikhzlUpFcXGxYGobHR2d8ACq1tZWGhoaGBgYECkplZWVjI6Oiqjmzs5OXn/9dRH0NDIywujoKIWFhSILIScn56wLsASLxcK8efNwu93s3LmTuro6Ojo66OjoYHh4GJ1OR2pqKocPH2ZoaAiTyURmZiZ5eXmkp6eze/duTpw4gc1mEwtDdnY2drsdn8+HyWQSpDxnQywWo7GxkZqaGo4dO8bQ0BAffvghLS0tn0qQmt1un/BskclELBajv7+fQ4cOcfjwYaLRKDabjYaGBtra2k6hXJ4ISLuCXbt2ndP5LpeLpqYmGhoaJpymV1Io9+/fT19fn2CRlALWzkeAfxwoFAosFgv5+fkUFhZiMplwOBzU1tbS29s74e8dCATo6ekhGAxO+DtGIhEcDgd9fX0EAgGKi4spKiri+PHjlJeXY7PZsNvtOJ1OBgcH2blzJ6Ojo8IaKGVRKBQKGhsbGRgYEMW0pDgot9uN1+sVi+7pIGU1DA4O0tfXh8lkorS0lMHBQXJycohGoyJrqL+/X7Q5GAxSUlJCfn4+9fX1lJeXY7VacTgcorDXyMgIw8PDdHZ20tLSItaAjIwMPB4Px48f59ixYzQ0NAiF7lwWZUn5HR0dpaOjg66uLiKRCPPnzycSiYj08dbWVnp6esjLyyMrK0so2C6XC5fLJe7jdrux2WznFLQeCAQ4fvw4zc3NlJWVUVxczPTp08nMzGRoaIjm5mauvvpqDh48yOHDh2lvb2d0dJRIJEJPTw/RaBSHwyH6Kl52SP0mWXv7+/tpa2vD4XCQmprK7Nmz2bNnjwiQ9ng8dHV1ceTIEUF1Lq2dVqv1nLORztky0NjYKPLD8/Pzuemmm9DpdCLCeHR0lJSUFMxmM7Nnz6apqUnkTF9//fUsWLCAF198kf3795OamorVahWUo1deeSX19fUMDg4ybdo0srKyMJvNqFQqoSR8FFXs+UDKGDCbzeh0Onp7e/nCF75AY2OjCGZsbm5m8+bNPPLII/T09IgI92XLlvHMM8+InN+pU6ee1Rwjk8lQKpV85Stf4a233mLHjh309PRQWloqAusKCgpYvnw5u3btQqlUkpGRQWlpKRqNhkAgwMaNG6mqqiIYDAotv6qqiueee44DBw6IoJvk5OSzmudUKhUNDQ10dHSQnp7OypUref7551m5ciXXXXcdBoNBCAVpMkomNClfV/oTHz0cH+QZjUaJRqNjfpPOle4n/env76enp4fc3Nwx2RPAGM4H6flweh/7JwWVSsXAwAD79u1DoVCwatUqTpw4wfHjx0lPT2fatGlj2jq+vwCxs5LeTzpX6m8pgFL6XRLmO3bs4IEHHjjtPSRIlrmhoSF8Ph/r1q0Tv0tBeFK7pN/Hf6uzIRAI0N3dzauvvsq1115LaWkpsViMjo4O9u7dy5w5c5DJZKJ98d9q/AItl8vHjCnpHCloVuIakI5J94yPH5CuVygUeL1eWlpaSEtLY8aMGWfseym2I35MS30u/Q6IwFQpu6W+vh6j0Sh2kuP7bnz2j/TuH7VDi0ajDA0NMTAwgM1mY8qUKWi1WrZv347RaBSZGBJNtdlspq6uTixYPp8PpVJJfn4++/bto7KykkAggEKhwG63YzKZxI5YSmk+EyKRCH19fWg0GjIyMsjNzWXu3LksXrxYZDl5vV46OztJSUkRbS4vL0er1bJ79+4xbfb7/WLR9fv9HD9+HJlMhsvlQiaTsXbtWgoLC9m/f7+IqB8dHeWOO+4YE1B3tr5zOp0inVLaiN57772CNr23t1d8o9mzZzN9+nQ2bNiAx+MRfWQ0GkV/Op1Oent7mTFjxlmfLY2J3t5eZs+eLdqTl5dHXV0dbW1tPPDAAzz11FPs3LmT0tJSLBYLDoeDadOmEQgExMbT5XLh8/lQq9XIZDLBwaNSqaitrUUmk3HgwAEMBgNFRUWUlJTg8XgoKSkRAewScdmRI0fEmJUUyXPd6Mli56jqjp+M0gSSMF7YDwwMiEC0+CAtj8eDSqUSUerSNVJkuFKpxGQynXaiTiQk/neJDAMQJBnShJbeJV64y+Vy/H6/CHQ83wC0UCiE1+vF5/ORkZExhpdeMo9ZLJYxJB5SQZ54M6wkTKUcdq1We0599Oqrr9Lb20tOTg433ngjL7/8MsePH+eLX/wiM2bMEBkfUrCjFLTlcrlEND4gNG+r1UpRUZFIZZE09dzcXGFW9Hq9IhtAijSXvrnX6yUzM1NwEXi9XpRKJWazWfSBpEWHQqExJuBPwxS8f/9+9u7dSywWY9asWbS1tbFq1SpKSkpEZLGUF69UKkVUr/QefX19yGQyTCYTWq0Wu92OTCYTKZF+vx+TySTcOVJq1pNPPin8oNI1UsS+hOHhYZHaNzAwwEMPPYRSqRQ7j/FRy263G5fLRVZW1kf2aSwWo6mpiX/7t3/jW9/6FlVVVWPIkQYGBsjLyyMQCAjCmczMTJEO53A4xGIskZcNDAxgMplE9PvIyAgWi4X+/n60Wi3JycniGVLWjUREpNPpGBoaEubhxsZGNm3axNSpU6mqqhLkZ/Hza3h4WGwAJA4LqV6EwWAQlrVYLEZ7ezvp6eno9Xqxc5Si96W5Gj/OpcJc0iIoMTGerU+lZ42XdVJ7pej3eEVRLpePWTjiZZSUohcvO+IVHDh7sO94RTa+HeOVnXhF66PaLN1PSoGTCKUkSOZ2pVJJenr6OZO/xfed9Ix45S/+eLxiGg6Hx5wbr5hK7/dRCnK8chuv/MWvk1K7QqEQNpuNaDRKcnKy2HTFf5f4bxl/D6nPpAVfamMwGBRjQHpuIBAQc2l835/L2nDOloHxNztdIFw8MjMzT/tBTxdBDKdGl4/fxUw0DAbDKdaGM2nz43ejWq32jO/3UVAqlaeN4o8n1RkPKW9+PORyOTk5OefdjmAwSEtLC0888QQOh4O/+7u/Izs7m9raWvbs2cOSJUv41a9+xZ133imKFgUCAV588UX+/d//Hb1eT3d3N4ODg+Tn57N//36mT58udsxFRUV8//vf5+c//zmbNm2irq4OgFmzZvH666/z2GOPoVAo2LBhA4cPH+app57i/vvvJycnh5ycHEZGRujr6+P555+nubmZ7du3o9VqcTgcvPLKKzz88MPcfPPNn1rUvdPp5PDhw/j9fh544AFhGRoZGeHxxx+npqaGFStW0Nrailar5Zvf/CbZ2dn867/+K8uXLxdmxDlz5rBx40bmzJnD1VdfTVdXFy+88ALPPPMMBw8epLW19ZR0zccff1zE7bS3t3PHHXdgMBj429/+JtxZe/fuZdGiRfh8Pv70pz+JdMqnn36aa665hrvuuovdu3eL/P7/7//7//jtb3/7kQLQ6XRy8OBB5syZM0YeKJVKcnNzaWxsZOPGjRQWFhKLxXjjjTf4yU9+wvbt23n77bdJSUmhoKCA999/n5tvvhk4aXEsLCxkzZo1fO1rX+P+++/H6/Vy7NgxTCYT//AP/0B1dTVPP/006enpzJkzRwQtr127lieeeIIFCxZgNBpFvn1rays7d+7k5ptv5uabb6apqYmamhpKSko4duyYSCP78Y9/zHe/+10RkLd06VKqqqr43e9+x/XXX8/OnTvJy8tDq9Xyr//6r/zyl79ErVaza9euMeP8hz/8IU8++STBYFC4UDdu3Mgbb7xxThkOp5N1kuIfP++l4+MzfaR7jJ8PF6I0j5fzkvJ4pnuda5uBM46vlJSUMUrFx2nv+LadTm6ern3nu97Enxf/79O1RyquNv4dz9SX4+fW6TDewiORocXf53zXhXNWBs73xmc6/2IJ7DldO86nbRf6HufbLx/1nAtph0qlEkEnc+bMITU1ldHRUY4fP86+ffsoKirCYrHQ1NREeXk5GRkZNDQ0kJeXR1tbGxaLhUOHDnHixAnWrVvHwoUL+ctf/kJxcTGVlZWkpqYyZ84c3njjDaZMmSJ4JW666SaCwSBHjx5l+fLl5OTk0NbWJsiASkpKmDt3Lj09PWzevJnu7m4OHjyISqWioqICj8fDli1bWLdu3VnNnZMNlUqFxWJh8+bNzJ8/n7lz5wrOCSmi9+qrr6a7u5v29nb2798v3ErFxcVMmTIFtVrNX/7yF774xS9y5MgRjh49itfrxWQysXfvXkZGRli1ahWpqak0NTURjUbp6uqiuroalUolqKAPHTpEW1sbs2bNoqysTFAk+3w++vr6sNls5OXlkZubS05ODjfddBM1NTU0NTUJEzJAR0cHhYWFZ+3XWCwmfM/xC4+0W3nhhReYO3culZWV+P1+Ghsbee2111i7di1Hjx6lrKyMJUuWiCqOy5Yt47nnniMcDpOWlkZOTg6rV68mOTmZvXv30tLSQk1NDYsXL+aFF17gzjvvpKKigo6ODnbt2sW0adMwGAwMDAwIK8yCBQtYs2YNg4ODRCIRjhw5woYNGygpKcHn89HT00NJSQkzZswgOTmZ66+/nlmzZrFz506OHDlCQUEBW7ZsITk5mYqKCqZMmYLP56O4uJhoNMqrr75KSUnJmHH+3nvvkZ6eTlpaGlOnTqWsrIxDhw7R19dHUVHRWZXWyZjfF4qJetaFrBUX8uxPUmZOxLMvRNE41+MT8U6JQkWfQUiukdLSUrZu3cq6detQKBSCQ3zKlCmiXkB3dzehUIiioiLKy8vxer3k5eUxbdo0sVvfuXMnHR0dZGdniyyS/Px82tra0Ov1YtGRqI0dDgcKhUJw9EukQWazmfT0dPx+v2Dek3yKfX19ZGZmcsstt5CamvqpKpVqtZrc3FwqKip49913CQaDzJkzh+TkZGEGTEtLE+ZBu90ugmWlOgXZ2dk4nU7mzZvH5s2bMRqNFBYWsnjxYj744APy8/NJS0sTqU5S8F4gECAzM5PS0lJhLt62bRszZsxAr9ejUqkwmUz4fD6Sk5NRKpWiuuDatWspKiqipqYGtVpNZmYmM2bMwGQyiVLVZ4JMdpJ/orS0lOrqapYtWzZmkYvFYvT09DBr1izB35CdnU1HRwdJSUmCOCczM5OMjAw0Go3g4o/FYiLLSFpUU1NTGRwcFONCr9eTm5tLZmamCFwrLS0lPT0dpVIpaInNZjOZmZnCWiOxaa5atYqysjI0Gg1paWmYTCY0Go24vrq6GrfbjVar5XOf+xxKpZKDBw+iVCopKCgQVsS+vj5ycnJOGec6nY7k5GRSUlLIzMwU3+BSZEVM4LOJS6+yRwIXBIk20+Vy4XQ60Wg0rF27Frfbze7du7FarSgUCiHIi4uLKSsro6Ojg/3794usCqlQSXFxMfPnz0cul3Po0CEsFovIDpACVoqLiwmFQqJAjRQT4nK5RMyGz+cTfPMSK6EU5OVwOCgtLaWnp4e6ujqGhoZEIOUnFbkej3A4jM/nE8x5d955Jz6fjwMHDnDgwAH6+vpEVchQKCR2zFLg1+DgoAiogpNpurm5uYKpMCMjg3nz5nHkyBERDxAIBHC5XMIfLH2flJQUSktLKSsrIyMjQ5QC7uvrw26343a7BUtZR0cHnZ2dlJSUEIlESElJEYx0FotFWIc+KjjTYrFw5ZVXsmvXLurr64WraHh4GLvdTlZWFr29vQwMDODz+VAoFJSUlIhvHQgE8Pv9+Hw+XC6X8C2Hw2GcTicAXV1ddHd3C2WmpKQEp9MpfKJw0tUoWUYKCgooKSkhNTVVxEBIPl+JEj07Oxu/34/BYGDOnDkUFRWJ+hU+nw+5XE4oFMLj8RCJRFixYgXZ2dk0NzfT2dkpAnedTifp6emnjPOCggLC4bAIBIOT1iMpziWBBC4FJCwDnyG43W56e3vp7OwUQTz/9E//xHe/+12+/OUvo1AoCIVCvPzyy5SUlDBr1izB+LZjxw7BHxGNRgW5iRQlW1BQwObNm6mpqUGj0dDd3c2DDz7Ipk2b6OvrIzU1VWRkSBUIh4eHBVualDc9d+5coQy0trZiMplEgSSlUkl7e7so+vNJZxZIkfodHR2oVCo0Gg0//OEP+fWvf82GDRtEQRKbzSYqpknU1V/+8pd55ZVXaGlpobe3l9HRUb761a8ik52s7VBSUkJubi5GoxGdTkdFRQVarZauri46Ozvx+XyConv37t10dXVRUFDAzJkzueWWW/if//kfent7MZvNIhXN4/HQ0dEhakb09PSg1WqZM2cOO3fupLOzk1AohFar5cYbb/zIaqPZ2dk88MAD/Mu//AvPPvssFRUVIkjQaDRyyy238Pzzz2MwGAQ51te+9jV27twpUpyGhobo6enB7XaLIKjR0VHa2tqIxWL85S9/obCwkIyMDFGNcNu2bWKHH4lERKW8V155hYKCAoqLi0VxI4VCIeobOJ1OzGYzV155Jf/1X/+Fx+MRZDOSgjowMEBycjLBYBCr1UpDQwMHDhzgiiuuYPny5eTn5wuOlObmZq699lrefffdMeP8y1/+Mk8++STd3d2CwU6r1dLR0UFFRQVms/kTGqEJJHDhOOdsggQubcQXPIqPBh6fLRGJRBgaGiI1NVVEq0pR0lJkuFwuF7ugtLQ0sShL+a3BYFCQMcWnwcW3RYJ0fynqOT7lLhaL8de//hW1Wi0CJQ8dOkRLSws/+clPLqiM88eB1KbxUbrxv0npceMzbaSUOavVKmohSKlrgUBgDHe8tEjGPzO+f6SStvE+fzjJSRCLxdBqtcRiMREDkpOTQ1FRET09PfzsZz9jw4YNmM1m3G63KNZ1LgFU8d8tGAyKktHxga9+vx+3241MJhMETPGR2vH3UigUou+k7Iff/va3ohBWPAGYdG58FHh/f784N/47xN8XEBH4o6OjIjc7PoUz/vxoNMrIyAh6vV7UB4n/tpLFIX6cj48Ml6LTpbZcLHFSCSRwNiQsA58hnClQZ3z0ajzphxSROz6C2WQyYTQax5ynVqtFGpL0nNPt3se34XQRs5IQ3r9/PzfffLMIRGxsbGTZsmXnlIc80ThT/8X/fjq/e3xfSAVS4q+RFn5pkYv//+lqAEiL7/j2jA/qa21tRaFQkJWVRUFBgSBkUalUokDO+G/4Ue8vQYp9GB+5rNVqRbptfOrWme4vvYO0gErMcNIiGp/mNf5Z48lpxkd4x/9fSnEe35b4DCKpHdJ7jX+edG38OD/ds+LPTSCBSwUJy0ACFy1isRgHDhwQhVIkK8LUqVPHcDQkcCpisRh9fX00NjYik52kuQ6Hw1gsFsrLyz8VZepM8Pv99PT08Pvf/56bb76ZmTNnTijJWAIJJPDRSFgGErioMXv2bDo7O/F6vSgUChGRnjC9nh0ymYzc3FwikYgI1pNSNC82yGQyjEYja9euJSkpKaHkJZDAp4BztgxYrdbJbksCCSSQQAIJJDDBkFh2z4Zztgw8++yzH6sxCSSQQAIJJJDAJ4/vfe97H3lOwjKQQAIJJJBAApcxzsUycN6FihJIIIEEEkgggUsH58LJksgmSCCBBBJIIIHPOBLZBOMQiUQIh8OizKWUJx0Oh8eQp0i8+hcS+SxRA8vl8jGkJFJpSqlc5fgyoD6fbwy5iU6nu+AiH5MJqeyyRB8LiPxxif41nhDmdFXYTlem83KDRFYjMQRK/RKJRETO++nePRAIIJPJxpS0vlwRi8XGjHtpzkSjUdFP8WVxpZTJYDBIJBIRc1Yul38kw+LFjEgkQiQSOaWQVDQaJRqNEg6HP5H3k54ntWU8uZZE3BQvvyTEU41PdDulNsXzdEhtktp8unTaeJk72QRRUlukQl/Ss6S2w0nOlfF9Ko1lib9Foo2faCSUgXHweDyMjIwIdrVoNIpWq8Xv9+P3+8WgslgspKWlodfrP7L0azykRXJoaEgUldHpdKKW/ejoqGCX02q1Y2qTd3R0iIEbi8WYOnXqpAyKj4toNIrT6aS7u1sIBIPBQFZWFidOnBDkOJFIBI1Gc0q6m1QDYGRkhPz8/EtWgJ8LbDYbcJLESalUijGQlJSEXq8f8/3hpELocDiAk30qlcK+XPsoEonQ1tYGnBxXer0eo9GIx+PB6/Uik8nEQigVOYKT5aSdTqdQnAwGA/n5+ec1Vy8WxNenyMnJEb+Hw2ECgQBerxe/309KSsoYmTHRiEQioq6ExD5qMBiEchYKhUTdEL1eP2Yz4/V6xUZArVYLmfdxIS2wEv12NBrFYrFgNBoJhUKiuFc0GiUjI+OU95Hmm1wuJzk5eQwx1URCWtRHR0ex2+2kp6eLuSu1IRKJiAJx8X0zMDCA2+0WDJhSgayJxqU3MyYZR44cYdeuXRw9ehSDwYDVamXmzJlkZWUxOjrK0aNH+eY3v8kPfvADFi1axOrVq5k9e/Y537+/v5/Nmzezf/9+UQL4mmuuoaioiNdee42qqipee+01li9fzuLFi8Xk9/v9PPbYYzgcDpKTk1Gr1fzwhz8kIyPjolsIfD4f1dXVvPLKK6jVarRaLdOmTeOqq67i0UcfpaysDIVCgcvlIjMzk9/85jfi2lgsRmNjI2+99RYjIyP89Kc/vWzzzoPBIPfddx933303K1aswO1288Ybb/D222/z61//WlQilBCJRHjiiSeoqKigs7OT1tZW/v3f//2iIhCaaPj9fn7xi19gMBgIh8NUVFRQXl7Ozp07sdvtyGQyenp6KCws5Ktf/apQBjZu3MiJEydEAaQ5c+bwxS9+8ZJTBmKxGG+//TbHjh0jKSmJ73znO+JYY2Mjx48fp7+/nxkzZlBTU8M999wjqLsnGj09PWzfvp23336bcDiM2WzmJz/5iahDsX//fgYHB7nhhhvGWPvC4TD/9V//xaJFizh69Ch6vZ7rrruOvLy8CWnX0NAQTz75pKhvEo1GefLJJ/nwww/58MMPCQaDVFVV8aUvfUlcE4vF6OzsZMuWLcyYMYMXX3yR9evXM2vWLFFfYiIRjUbZvXs3v/vd7zAajTQ2NvLkk0+iUqmora1l7969dHd3s27dOm688UYKCgqAk3P+z3/+M4ODgwQCASwWC1VVVdx9990T3sZLa2Z8AkhNTWX9+vU8/PDDxGIxfvvb33L77bfj9Xo5dOgQg4ODzJ8/n+XLl4sd7PlAr9czc+ZM7rzzTmw2G7/4xS/Yv38/JpOJ5uZmUbzm8OHD7N27l1tuuQU4ufO7/vrryc/Pp7y8HPg/N8HFCIVCwb/8y7+IErGSufc3v/kNU6ZM4eDBgwSDwVMEgtVqxWq1CjP45Qqn08n+/fspLCwUHPhTpkzh7rvvpqur65TvGg6H2blzJ5mZmVRWVmKxWITSdcUVV3xKbzH5UCqVLF++nNtuuw2NRiMsaGazmTlz5hCLxdi8eTPRaHSMUp6WlsbnP/95ZsyYIe4z3sR+KUCq4KhQKE5RZN5//31cLhff/OY30el0/M///A/XX3892dnZkyIXQqEQixcv5uabbyYWi3H11VfjcDiIRCI0NjbS2trK3//9349xX8ViMcLhMB988AF33303RqMRq9VKT0/PhCkDHo+Hb37zm2g0GhoaGvjFL34BwKpVq9DpdLS0tJxyjWSd7ezs5N577yUcDlNTU4NcLmfNmjUT0q54+Hw+ysrK+MlPfkJBQQE/+MEPaGlpIT8/n8WLF3PTTTcxNDTEb37zG0ZHR8V1MpmM7Oxs7r//foxGo3ATTAYSysA4FBQUCP9jf38/2dnZmM1mIpEIoVCI7u5uXn75ZQ4dOsStt95KcXHxed3fZDIxbdo09Ho9fX195ObmotfrGRkZQa1Wo1QqyczMxO/3C3MwnNQQ6+vr2blzJwaDAYvFwre+9a0JfvuJQzgcZuPGjWLSz507l4ULF6LX60V515SUFEpKSsZc19fXh9vtpri4mCNHjnxKrZ9cSCVxQ6HQGMY9ya99uskumcvT0tJElUCTycTAwMCYWhCXG6LRKO3t7Tz11FO43W6qqqpYvXo1VVVVGAwG9uzZQ0ZGBllZWWMWS4/Hw759+9i1axf9/f3ceeedVFZWXnIKZnNzM8nJyaSnpxMMBscc02q1jIyM0NraytSpU2lraxPm5MmwpklWSonaOjU1FZ1Ox8GDBzlw4ACpqan88Y9/ZO3ateTm5gp3oEKhYO7cufziF78gNTWVOXPmTCgTZk5ODl6vlyNHjnDixAmWLl0KnCwjLdW5GA+n08no6KiQudnZ2bhcLlFefKKh1WrJyMgQ8zccDpOVlUVRUREKhYLOzk7efPNN1q5dK4q8wUllyuVy8dprrzE4OCiqcM6cOXPC23jOI8Zms2G1WvH7/acc8/l82O12Ubp1aGiI4eFhhoaGRE3vWCyGzWZjeHh4zJ/BwUF8Pp+onPdpw2AwoNPp8Hq97Nmzh6qqKvR6vQhC0mq1ZGZmUlBQQGtrK93d3ed1f5VKRVJSEtFolGPHjjFjxgxKS0sF/z4g/FbxfaJUKpk+fTozZszAZDJx/Phxenp6Lpp+i4dKpRKlZadMmUJPTw/79u1DLpej1+upra1Fr9eTmZk5xgze2dkpxkskEsHj8Yga85cThoaGaG1tRafTCT+iz+f7yPd0u90iyEmpVKLRaC7K7z+RkBaSoqIi5HI53d3dNDY2kpSUhN/vp6WlBb1eP8aXDlBaWkppaSnZ2dkkJyfzzjvvjAlovdgRiURoaWnB7/eLqqFerxePxyPiRyoqKsjKymLv3r0cO3YMpVJ5SgDaREKv16PX6wkEAhw6dIhrr72W5ORkuru7GRwcZMaMGWi1WjZt2sTw8LC4LhaLkZSUREpKCna7nba2NgYGBiakTTKZTMQnSAv/8PAwIyMjY4KtxyMQCBAMBscU2JLaOhmQ5qtUhr2kpIScnBzMZrMIJjSbzTQ2NuJ0OsdUkp0xYwYFBQVkZmbi8XjYunXr5LTxXE8cGhqipaWFsrIyiouLxwSutbS0YLfb0Wg0FBQUUF9fLwS/RqMRWtGJEyfQaDS43W5CoRAmkwk4qdllZGSMqbr2acLv9zM4OMjx48e59dZbhWapUqnIzMxk7dq1KJVKnnrqKXQ6HQsWLDjne0sBLwMDA/T393Pttdei1+s5fvy4EFZS0GK8300ul3PNNdegVCppaGigtbWVrq4usrKyJs1sdKFQqVSUlJRQVVUFwC9/+Uva2tpElsauXbtYs2bNKUEwra2t+Hw+AoEAfX192O12UU72YnvHj4OhoSGam5spLi7GbrfT19fH6OgooVDorNcplUoRDCVZA5KSki5rq4BcLudzn/scWq2WrVu30tjYSGNjI0uXLqWlpYVwOCysJPB/Ee0zZ84UAcAdHR1885vf5KGHHvqU3+jcIZne4WQw5NDQEKFQCLvdLhToWbNmIZfL2b59O8ePH6e8vJykpKRJnSuBQIDh4WGOHj3KLbfcQnJyMh6PB7lczqJFi3C5XDz88MMsWbKE/Px8otEoPp+PYDDIrbfeyo4dO+jr62Pfvn0TYh2QMrPUajWlpaX4fD7+9re/MTAwQHJy8hmviy8XDifHmsFgmNSA7HA4jNPpFNaL9PR0kVmRmZnJ1VdfzVe/+lUWL15McXGxmONLlixBr9djt9vZtm0br7/++qS075yVAZVKxaOPPsrtt9/OfffdR0lJiZh4v/vd73A4HKxYsYLy8nI2bdpENBpl2bJlOBwOdu/ezZVXXklTUxMLFixg69atdHV1Cc1yZGSEhQsXXhTKQCwWo62tjf3797No0SLxsaR3lVK/LiSTQLq/2+3mlVde4Qtf+IJwQSQnJ2O1WolGo9jtdiwWC6mpqSI9ymazYbFYgJPfIjs7m5SUlItyIYhGo7hcLiG00tLSRHnapqYm3G63KJ8rKUdSBLLdbmdwcJCenh5sNhsjIyNkZWVdkv7eM0Gn06HVamltbcVqtWIwGHA4HCISO75P4v/Oy8tjYGAAv9+Pz+fD7/ef4ma5nBAKhRgdHSUlJYVoNCrM5XK5nFAoxBNPPMHDDz9MUVER8H8LQzQaxe/3o9FoUKlUmM1m8vLyLimFUire1N3dTW9vL/39/chkMmw2G5mZmSL6ffny5cydO5ctW7Zwxx13nBPT3IUiGo3S3d3N0aNHWbhwoZA/arUao9FIUlISZrNZ9HMkEsHr9dLb24tOp6OwsJDbbruNgwcPUldXN2Ht6uvrE9H52dnZVFRUEAwGx8wdSYbDyUXZZDKh1+ux2WxCvmZmZpKamjph7YpHLBbDbrfT0tJCKBRizpw5KJVK7HY7oVCIzMxMzGYzGRkZqNVqkUoaP5a1Wi2pqalkZWVNShvPeSUrLS0VC/qbb77Jt7/9bQB2796NWq0mPz+f7Oxs9Ho9RUVFhMNhKisr0Wg06PV6PvzwQ37yk5+QmppKb2+v0CQrKioYHR3FaDROygueL9xuNwcPHmTz5s28+OKLYrEdHByksbGRo0eP8txzz9He3s4dd9xx3r6bhoYGnnjiCWpqati4cSOhUIhrrrmGlStXYrFY2LlzJ4cPH2bJkiWkpqayefNmamtrxQCXtMXKysqLsgIdnPTHvfjii0yfPh2r1UpaWhoLFy7E4/HwrW99i9/85jfCrOtyudi7dy/79+/noYceYvr06dTW1tLZ2UkoFBojXC4XVFRUUFRURGtrKxs2bBB5wz6fj6amJo4ePcr777+PxWIhEAjQ2NhIe3s7Dz74II8++qgQwnK5nGnTpn3arzNpiEajOBwO/vd//5dp06bhcDgoKytj9uzZVFdX4/f7RSoWwPDwMPfeey9//OMfefHFF1Gr1WRkZDAwMMBPfvKTi0bGnAuUSiUrV67EZrOxYcMGOjo6gJMxR//2b//GkiVLmDp1KoFAgNraWmKxGLfffvukZkscOHCAN998k7feeovs7GwCgQB33HEH6enpGAwGnnrqKSwWC3fccQcWi4WXXnqJmpoafv7znzMyMsKBAwfo6elBr9ePiez/uKiursZms4kFfurUqcyePZvh4WFqamqoq6tDp9NxxRVXYLFY+P73v89NN91ETk4ORqORHTt2cPDgQa699tpJU66HhoZ44403ePzxx8nNzeW///u/qaysxGAwYDKZKCoqIhKJcOedd1JSUsLGjRt57733+NnPfsavfvUrFi9ezOjoKCaTiUcffXRS2nheDITPPfccW7ZsIS0tjf/3//4fubm5/O///i8OhwO1Wk1xcTHXX389Tz31FMFgkLKyMpxOJ01NTdxwww3MmTMHhULBM888Q3NzM/feey8VFRXCHHgx7HIjkQhutxuv1ys0MJlMJvx1wWAQg8FAJBJBp9OJAJRzhd/vF9qgQqEgHA5jMBgwGAy43W7cbjdGoxGj0YhCoSAUCgnNcGRkRJD0SEFkFyMikQgOhwO73U5ycjJarVb0U19fHxkZGYKwSdJ8fT4fZrMZONlHUl+npaWhVqsvu/TCaDRKIBDAbrejUCgwmUyoVCqCwSB2ux2tVitM36FQiFAoRHJyMkNDQwSDQVQq1RiegcsRUu56f38/CoVC+KzVarXIvU9NTRXzLxwOMzQ0RGZmJna7Ha/XC0BycrLIh78YZMz5IBQK4Xa7hQvRbDbj8XjGcHVIVjcp2nyy4PV6hWxUq9XC1SvJKZfLhVarxWg0otVqhcsvLS0Nm82Gz+dDpVKh1+vR6XQTEswpWVptNhtKpVLc12QyEQ6HRd9JlhSlUonNZsNgMKBUKhkdHcXj8WAymcQcnAxZI31Hh8OBRqMRJcWlNcDj8ZCWloZSqRS8Nl6vl9TUVIaGhvD7/ej1egwGA1qtdlKUvvNSBl566SU6OzsJh8NkZGRw5ZVXcujQIXp7e4lGoxQUFAhlIBQKMX/+fLG7KSsrw2QyIZPJePrpp4UycLHtbOK7YzwT1HhcyMSTzMDxqTfx9/J6vWi12jHuCQkSgYpSqbyod8tSmyWhJQnh+Hf/qL6Vzjvd+ZcD4vti/HgY/5sEmUwmGMwk8pbLHRJZSywWE8Jz/HgZP5cAwconsYVeqjidvIhnrpPYFz8JZflssktS3KRAvnjZJZ3v8/kmLcjR7/efIhvHj5Pxc0pqt8/nm3Q2V6nvpOfG/1siootvw/ixHAgERHbEZOG81YsZM2YwMjLCe++9R3p6OmVlZdjtdtxu95jzZDIZFouFsrKyi5IlT4IUqSvtPuMnms/nE5GekpYrDSBph3K+k1C6/+koMCWBd7rzAaGNS5PuYl0gpXZJlgtJKMfnH0sL2unoN8PhMKFQ6KKlW/64kBYqaTzF01vHYjECgYAQauPfPZ7VbbJSyC4myGQyIT/C4TCRSOSUeRpP5SpBCrQERLqdFIh6KY0nSRmSfPPx3zt+0QsEApNO3R0/F8fThcfTaYfDYfH/073PZKTCqlQqQSUv9Yskq6VxcLrdtNR2yboyWYjvN0n5kH6XFKhwOCzkf3z/SG5ESW5MlivonO8qLYYVFRXo9Xp6e3upqanh6quv5vDhwwSDQYLBIOFwWPwt8dHHQ4ool6gix2uPnyQkU6MUsS6ZpEOhEB6PB6fTKYI2BgcHGRgYEO4Bo9FIeno6RqPxvHZoElHR4OAgCoUCs9ksAhElk5ZEnyrlnJ+OctNkMgmz+sUo3CShEAgEhEtEWuxCoRC9vb0ivVBCfDphIBAgKSkJi8Vy2eXRS+6Bvr4+MbELCgowmUyC7jUWi5GSkjJmDMDJhc3pdBKLxdDpdKSkpAAX5xiYSEhzQ3KPSIJ7eHhY9EV89HhXVxc+n2/MrnTGjBljrr2YIQUqS2ZsyQ0QTz8tyVG/38/w8DBTpkz5RMZBNBrF7XZjtVrJzc0VZm9pDYhP95PGrcPhwOl0CjeB5F74uJBk48jIiJCNZrNZkHJJfRSJRDAajWOI2sLhMF6vV8w3i8UyqXTOUhqxzWbDbDaTmpoqXNAOh4NwOEx6evqYwHSJyllaV6UsvdPVc/m4OGdlYNu2bRw8eJC0tDSKi4v50pe+JHJOpQCn0dFRKisrqa2tJRwOM3fuXPLz88f4tnt7e+no6KChoYHq6moqKys/td1NTU0Nu3btwmq1snPnTn7xi19QWVlJc3Mzu3fvZvHixTz22GP8/Oc/p6+vjx07dgg64h/96EcXREc8MDDAu+++y759+2hsbGTt2rVcc8015OXl8ac//YkVK1awefNmli1bxrx58wQ15sDAAH/+85/JyckhKSmJXbt28ctf/vKiXAQkAdDS0sLOnTspKCigsrJS+MCPHTvGb37zGxYtWsTDDz8srhseHubNN9/E7/czc+ZMXnvtNf7zP//zsjOH9/X1UV1dzbvvviv8gHfffTcmk4mdO3cybdo0nn/+eb7whS9QWVkpIpwjkQhPPfUU06ZNo6Ojg7a2Nn76059edv0TD2ksvfLKK+h0OioqKpg5c6aQGf/8z/9MRUUFa9asYc6cOeK63//+9/T19WE0GolEItTW1vLqq69OGCf+ZCMWizEwMMDvfvc7Fi1ahN1up7e3l3/8x38Uc763t5djx46xf/9+6urqeOmllybdJRKLxXA4HPz+979naGiIRx55hKysLKxW6xnpiAOBAD/5yU+45pprOHHiBEajkeuuu47s7OwJaZNERzw4OCisAU8++SRvvfWWUFScTidGo5Fbb71VWOM6Ozv54IMPmDlzJi+88MKk0hHHYjFqa2v585//jMlkYseOHTzxxBOCjnjfvn10dXWxdu1abrrpJkFHHI1GefXVV0lNTRX1KVJSUvjc5z434W08Z2Vg7dq1rF69Wph1S0pKhJn3n//5n8eYYp588kngpOlmvEkjNzeXH//4x8Lc92maOUtKSgR72d/+9jc6OjoE4UNJSQnz58+nqqqKY8eOYTKZyMvLY2hoiAULFrBixQpCodAF0xHffffdjIyM8G//9m8cOnQIk8nEtm3b+Pa3vy1cLlarlfT0dGKxGM8//zylpaXMmTNHCLf9+/czb968i45VTbJi/Nd//Rf/8A//QF5envjO4XBYWFjGC+VXX30Vs9nMwoULycvLY8uWLRw8eJBZs2ZdtMGSF4q8vDx++tOfkpmZKXZ5Bw8epLu7m6985StEIhH27t0r6HjD4TA7duw4hY549+7drF69+tN+nUlDIBDgueeeo7CwkLlz55KWliZ2nB9++CGpqamYzeZT5Mzdd99NUlISaWlpDAwMsHXrVjIyMi6Z2gSBQIA//vGPLFq0iMWLF9PU1MTAwAAHDx4UvCb5+fmkp6dTWlrK4cOHP5F2ud1uenp6AISLoLe3l+PHj9Pa2spDDz00xhXjdrupqalBo9Ewb948srKyqK+v56233uKBBx6YkDZ5PB6+/e1vo9Vqqa+v52c/+xkA7733HrfffjuzZ89mdHSUl19+WSiXEl9CR0cHX/3qV4lEIuzfvx+ZTMbatWsnpF3xiEQilJWV8Z3vfIe8vDz+3//7f3i9XlJSUliyZAm33HILw8PD/PKXv8ThcIypTfDWW2/xwx/+kOzsbNra2tizZ8+Etw/OQxkYv/uIF+TjYwLOtjhJfnIJn+bONjU1FblczoEDBzh48CAPPPAAzc3NeDwecnNzkcvlpKeniwqGgUCAjo4O/vznP7N//37uuOMOSktLz+uZSUlJzJgxQ5AvFRQUkJ2djdFoZNasWfzd3/0dJSUlXHPNNRQWFgIn+yg1NZW2tjZyc3PR6XS0tbUJ89bFBo/Hw9tvv41MJuPVV1+lvLyc8vJyioqK2LNnD7Nnz+att9465TqLxUJ/fz8mk4mMjAxaW1vHsHFdLojFYlitVg4ePEhra6tIsXW5XMItIBXGkhRDiY44IyMDjUYjMgkGBwcvOzeKBMkX/vLLL3PrrbfS19cnUgsBkYlzOsvI1KlTUSgUjIyMUF1dzY033jimbOzFDmnO19fXi7TKzs7OMXS5UsDcJ7kZcDgcdHd3U1FRwb59+wDYs2cP+/btIzMzk//93//l6quvJi8vD51Oh1KpJDU1lWPHjuH3+xkYGBhTzXQikJubi8fj4eDBgzQ0NIhaHddddx1vvvkmr7zyCtOnT+euu+4Szx0dHWV0dFSwvWZlZeFyuU6JfZsoSG6eUCjEu+++i1arJT09nZycHMGkuWHDBq655poxFhOFQsH69ev5j//4D5KTk5k7dy7r16+flDae8xeRgkcu5M/Z7vNpQqVSodPpRLxATU0NfX19wjcjk8nGCBDpg5aUlDB16lShDZ8PlEqlSE08fPgwlZWVTJs2TcQJlJaW0tPTQ0tLC4ODg+I6ySJw/Phxampq8Pl8goDlYoPf7+fw4cOUl5dTUlJCW1sb27Ztw2q10tXVJXyLbrd7TFGOyspKQcZTXV2N2+0WhY4uJyQnJzNlyhQqKytZuHAhO3fupLm5WUREA6dduNxut/jtUi28cz4IhUKMjIwwOjpKeXk5MpmMtrY2qqurBaW1REzkdDrHMDjq9Xq8Xi/9/f0AgqjnUoFSqWT+/PliZ93Q0EAwGBxjwv6k5adEfiTFAkmp0O3t7dhsNmbNmkVqaipvvvkmQ0NDwEkZm5WVRWFhIbt37+b48eOCH2IiIJPJRKEviUq+u7tbFDvLzc0lOTmZgYEBampqxOYpGAyK+Cz4Pwr4ydpcSYGKWq1WxHpJmx0peDgvL49Dhw4xMjIyZgOkUCgoLi4WNQwmq2bLpTM7JhjxkZnFxcUsXLiQrVu3YrVaAURerxR4olarUalUpKens2LFCpYvX86hQ4c4fvz4eT1XCnjp7e3F4XAwc+ZM8vPz8Xq9xGIx7rzzTtLT02lra6OpqUlcN3PmTEpKSggEAvT392MwGERRpYsNkUiEwcFBpk+fLtwptbW1DAwM4PV66ezsxOl04nA4xnCYl5eXM2XKFNRqNR0dHej1evLz8y+7RS8pKYmpU6dy9dVXc++99zI4OCgi3qVxJ9HsxlvdpPz6+Ajp5OTkT12pniyEw2FBtDJ37lxKS0vxeDzs3buXEydOEIvFGB0dZXBw8JS6KdFolK6uLtrb25kyZcpFnX1zOigUCiorKykqKhJMnElJSRNW6e9CMDg4yPDwMNFodAxduMR/Mn/+fJYtWyYUfzip1FgsFtauXcvQ0BBDQ0Oo1WqmTp06IW2KxWL4/X7BcyOReQ0NDdHW1saiRYu47rrryMrK4vXXXxfzRnJlxMt5KYd/MiAFMWq1WmbOnElSUhKNjY3C5ZKRkcGaNWv48MMPhbVPer+2tjZuuOEGVq9ejUKhYPPmzZPSxstry3UekIJKJGKbefPm8de//pXU1FTUajXDw8OEw2HsdrsogyrxKYRCISwWiyCuOB9Eo1FGR0d59dVXue222zCbzTgcDqxWKzqdjqKiIu69917ef/99rFarSKdSq9Xcdttt2O12Tpw4gVqtxmKxXJQCTiaTCeIkrVZLWloaIyMjuN1uDAYD7e3tgpRoeHhYsG+p1WquvPJKlixZQmdnJx6Ph5SUlMvOMhAIBPD5fCJdSBJiAHa7nUgkgs1mIycnh+TkZEKhEOFwmLy8PPr6+vD5fCK753yrZl5KkAqDSQpPQUEBvb29dHV1kZKSQkdHB8PDw3i9XoaHh/H7/SgUCnQ6HT6fj2PHjtHe3i7KgF9qUKvV3HvvvQwPD3Po0CG6u7uxWCwiLVki7QqHwyLFcjJdRpK1amRkhJ6eHkZGRrDb7chkMkwmk2DTk+artABqNBpuuukmgsEgL730EnK5nIULF05Yu/r7+0lLS8NoNJKZmUl5eTmhUIjW1lauuOIKZs+eTUlJCbt27QJOWi4NBoOgP5fm22TSEY+Ojgra+aSkJObMmUNfX59QpjIzMzGZTGRmZp6SQt7U1MSXv/xl5syZQ3JyMs8///yktPHykrLnAaVSyQcffMCePXtYvXo1ra2tfOMb3yAvL4/9+/ezefNmiouLBf/7iRMnaGpq4tixY/zxj3+ko6PjguiIT5w4we9+9zsOHTok6IivvfZaVq1ahc1mo7q6moMHDzJ79mxBR3z48GEeffRRDh06JKq0fec735mknvn4MJvN3Hffffz5z38WwYKzZs1ixYoVhMNh3nnnHZFTK5fL+eCDD9i/fz9///d/T09PDydOnMDtdvMP//APl50iACcpqQ8cOEBJSQn9/f2sX7+emTNn0tnZiU6nE/SoN910E4FAgDfeeIP29nYeeughHn30UZGSJJfLqaiouCgVwomARqMhPz+f3NxcduzYQWdnJxkZGXz9618XO8AtW7Ygk8lQqVS43W6+/OUv8+c//5kNGzbg8/mYP38+cGmmXkYiEbZv305rayulpaXcd999RCIRfvrTn7JkyRJmzJiBz+fj3Xffpa2tjbq6OqqqqiYt2HbatGmUlJTQ1dUlOPZNJhNXXHEF7e3tPP3006SkpAg64pdffpmamhr+4z/+g5qaGvbv38/s2bOZPn36hM7rPXv2YLVahUJSVlbGrFmzqKyspKOjg97eXrxeL1/96ldxu91873vf4+abbyY3NxeDwcDOnTs5ePAg11133aQp16FQiH379rFz507Wrl1LU1MT69ev5+jRo/zpT38SG6I77riD4uJiNm3axHvvvcfPf/5zKisrqampIRgMinMmA+fFQHi5QcrZlqwDUvCWxD/g9/sxm80YDAaRORAOh9FqtaKy4PmyAQaDQZxOp8imCIfD6HQ6sZtxuVxCa5WoKiUKZJfLJUhYLuZgKIlLwGq1Cl6G+NxYj8eD1+tFqVSKYkaBQAC9Xi/6WKppAZemID8bJH/r6OgoqampoqCORIXtcrkEhS4gLAMmk4mRkRFB62o0GsU5lyukzBSHwzFmHCkUChF3Aid30VqtFofDQWpqKh6PBzjps74UGQjjeQak8reSy8jpdIpyuBI5ms/nIykpSbCXThYkS4TH4xlTedbv94sAWMm9JXGMSEXYpHeYSMpficTHZrMJymqJy8Dj8eDz+YhGo2J8aDQaRkdHheyW1oCkpCQMBsMYYrSJhMShMjo6KujHdTqdoCl2uVwiPkqtVhMMBvH7/aIqpNfrFeREWq12Usb0Z1oZkHyvoVBozOIq+fWDwaD4/ZOiI5bqEJyOljISiYhAlIsdkjCT4jLiSTTOZsq8lN7xQiGNr0AgIMZXPKNeIBA47RiQ/h3PSPdZgURlG890dy64VBXJ+Ap78Wx+nzZ195n6XVIS4llF488NhUKTttDC/1G1j89WC4VCxGKxMb+Pn0/jZe5kQXLlSMqJ9HxpzsezEo5fF6Q5L5fLJ002fqaVgQQSSCCBBBJI4DOcTZBAAgkkkEACCZzEOUdxJAwICSSQQAIJJHDp4VzcH+esDLS3t3+sxiSQQAIJJJBAAp88SkpKPvKcc1YG9u7d+7Eak0ACCSSQQAIJfPKYUGXgfPPpE0gggQQSSCCBSwOJbIIEEkgggQQS+Izj8qN3+5iQ8uDH60jj/y9xnX+cvFQpx3T8feH0AR/RaPSiKPD0UZD6Kv7dpBzZ8edIx8ZfH4vFLsq6CxOJeP7x+D6IRqNn5dK/VMbBROB0fXS68XKm3+OPXcr99VFzIp6/45PgGTjds8bLyPFcKpPZvvhvfa5yJv66M42tiW4jnH5+f9T3k+b8ZLYxoQyMg8/nw+l04nK5BLmDRHUaCAQEa2BeXh4Wi+WCy4dKA6Ovrw+/3y94xgsKCs5IJuN2uwWT1sWMWCyGx+NhYGBAEMTo9XpycnLEOT6fTxDnjCfRCAQCotb35Y5QKITf7xeMaMFgEKvVSm5u7hmvcTqdgsXss4BYLEZ/fz8Wi0UQs8RDKvI1noZXYnELhUKTxjn/ScHn8+H3+886J6SiTpNJ4R2JRPD7/fh8PtLS0k45Hg6H8fv9onxx/HXDw8OC6W+iEQgERKEqqSogIDj+Tzc+4OQia7PZxjBbThYkwrDTze9YLMbIyAgpKSmnXewHBwcF42hCGfiEcOTIEfbs2UN9fT16vZ6RkRGmTZtGeno6o6OjNDQ08MADD/CP//iPzJ8/nxUrVlxwPIXf7+eJJ56gu7tbDIJ//Md/JC0tTQzKYDBIe3s727ZtY8GCBZSUlFz0yoDP56O6upoNGzYI5aWyspIvfelLxGIxXnjhBXQ6HeXl5ZSXl4t3tdvt7Nmzh61bt9LW1saGDRs+5TeZXASDQe69914+//nPs3DhQtrb23n22WfR6XS0tbXx61//moqKChQKhVCw/vCHPzBlyhSsViuDg4M88sgjl/yu92zw+Xz8y7/8C0ajkYaGBlauXMn999+PUqmkpaWF3bt3U1xcTEVFxRhhf/DgQWw2G263m4GBATIzM7nhhhsu+rlzOrz11ls0NDRgNBp58MEHxxxzuVy0t7eza9cu1qxZI5TKyUBPTw+7d+/m3XffJRwOYzab+Yd/+AdycnJEMaWhoSGuuuoq0c8SXfBDDz2EVqtleHiY+fPn88gjj0wIg2YsFqOxsZHnn3+enp4e5HI56enp/PznP+eNN95ArVYTDodxuVyYTCZuuOEGYTno6Ohgx44dTJ06lddee40bbriBmTNnToriGIlEqK6uPmV+Jycn09LSwv79+zly5Ai/+93vSEpKEteFw2F++tOf4nQ66ezspLCwkPvvv5+KiooJb2NCGRgHg8HAokWLWL16NXK5nJdffpk1a9YQiURoaGhAq9VSXl5OaWmp2MF+HMycOZO5c+eKeu1ms1kM1nA4zPDwMC+//LIobXwpcNFLVMRSwRKVSkVSUhKBQIB3330Xk8lERUUF2dnZYzRxg8HAvHnzsFqtl30qq8fj4fjx40LTDwQCZGZm8oUvfIHs7Gwee+wxOjo6SE1NJSsri0gkQmdnJ4ODgyxZsgSFQsHw8LCgNL4cIZlGr776anJzc3n55ZdRKBSMjIyg0+l46aWXuOmmm8jNzT1l17d3717y8/NZvHgxdrudX/3qV6xbt+6S66vBwUFcLtdpv3MgEKCpqYlt27Zx6623kp6ePqkU1cFgkClTpjBlyhRisRjf+973cDqdyOVyWltb6ejo4LrrrsNsNot5LVkSbr31VnJycnj33XeJRqOcOHGCqqqqCWmXz+dj/fr1ALS2tvKHP/yBYDDIrl27WLt2LRUVFYyOjrJjxw5hkQ0Gg9hsNjo6Ovjc5z7H4sWLOXHiBFqtdlKUgTPN7xkzZlBRUYFWq2X37t2ndbXMmjWLwsJCGhoa6O/vp7q6OqEMfBLIzMwkJydHlBYuKCigtLQUu91Oc3MzbrebxsZGnE4nRUVFWCyWC36WVBfB6XSKHbRULhlgZGSEo0eP0tXVJepeS8UqLnbEYjHcbjdWq1UU4wkEArz11ltcccUV9Pf3o1KpxhRgUalUZGRkkJmZeUm844UiHA6L4ipms1lw7qelpZGWlobZbMZoNI7hcpfJZOh0OkZGRjh48CA6nY60tLTLOq5CJpOhVCqprKzEZrNhNBpJSkoiEolQV1dHd3c3PT09Yiccv1j29vaSnZ1NTk4OJpOJzs5OIpHIp/UqF4yuri40Gg1JSUmnWH+6u7tpaGgQ/SCTyU5RsCcSSUlJJCcnY7FYRF/KZDIaGxs5fPgwoVCIjo4OtFqt2NRIrsBFixaRkpLC4cOHcTgcE9rGtLQ0oQjFz5fMzEzq6+vp7+8nJSVlTIVPj8eD0+kkFAphNpspKyvjxIkTWK3WCWtXPBQKBZmZmafMb51OR0pKCuFw+LTXyeVyZs+eTW5urihINVmWn8tXklwgMjIySE1NJRAI0NjYSGFhITqdTsQKOBwO6urqGBoaEtUGPw7cbjcnTpxg06ZN/OUvf8HlcgntcGBggP3795OWlsbBgwfZsWMHXV1dpwQdXmyQy+XodDqamprYsmULb7zxBrt27cLlcrFnzx4CgQCHDh2itraWgYEBcd3lbO6Oh6QkKRQKUbtcigEwm824XC50Oh25ubkkJycDJ/s0KytL7HiOHj16xgJalwskZSA5OZmmpiYRW+Nyudi+fTupqakcO3aMXbt2cfz48THzwufzjSnucqn1UzQaZXR0lP7+frRaLQaDgXA4LPzfcLIUdktLCwaDgX379rF9+3YcDsekvWtaWhqpqalEo1GGhoaYOXMmRqOR+vp6Dh8+jNlsZteuXdTU1OByuYCTi6DRaCQ9PR2fz4dcLsdisZCXlzchbZLJZOTn56PVavF4PASDQaZPn45KpWLOnDk0NjbyxhtvsHv3bmF9hZPKgMfjEZaU5ORkgsEgwWBwQto1HhqNhuTk5DPO77O9X1FRkdhcaTSaSUvzP2dlQKrwN/7P6aLuz3TsUkE0GsVut/Paa6+xbt06YZrXarWUlpZy//33c+edd/Lyyy+zadOmC36OVqvla1/7Gr/61a/47ne/SywWo7a2VgxIh8NBd3c3q1ev5oEHHuCDDz5g3759kzZgJwparZZFixbxyCOP8OSTT5KRkcH7779PR0cHycnJ3HLLLZSXl9PV1cW77777aTf3E0drayt79uwRpV27urqw2+0Eg0G8Xi+7du1i3bp1QsgBQgDPmDGDO+64A7PZzKuvvkpLS8un/DaTh/gI62XLlgmlYOPGjTQ2NnLFFVdw33330dPTwzvvvCMCyOBk4FgkEhHXm0ymS0rRDIfD7NixA41Gw8jICH19fdhsNmw2mzinr6+PQCDAlVdeyQMPPMDTTz9NZ2cnoVBo0toVi8VwOBy88sorPProo6Snp2Oz2YjFYtx4443ceuutPP7442PcfNKacODAAbKzs1mwYMFHLoLni2g0yuHDh2lubuaRRx4BTrLm3nLLLdx9993IZDJ+/OMfC4VRqiAoWTjkcjlarXZSLZKxWOyM8/ts18RiMQYGBvB4PKSmpjJ37txJad852xuam5sJhUJjFnqj0UhpaekpaVF1dXXYbDYqKyvJysqalIZPJpqamjhw4ABXXHHFGc2wubm56HS6jyVgbDYbycnJooZ1QUHBGNOvUqnEYDCQnp6OyWSisLAQrVaL1+u9qH2f0WgUt9uNXq8HTrpefD6fMDHGm34l98dnCTqdDrVazbFjxxgYGECj0TBr1iwGBgawWq1Eo1HWrFlzSinWzZs3M3fuXCorKyksLCQnJ4eWlpYxrqXLCX6/H5vNRk5ODunp6SxcuJCmpia6u7vR6XRiXuTm5uJwOMaMOYVCMWZuXmouFZlMhsFgoKenh87OTrq6upDJZAwODpKZmQmcdKuZTCbS0tIwmUyUlJQQiUQIBoOTFjvQ2dnJsWPHuPLKK8nPzxdugKSkJGGuH49YLMaRI0fw+XxUVlZOmFUgHjt37hRKY05ODjKZjLq6OubOnctVV13FggUL+MY3viE2qBaLBYPBwODgIMCYcTZZsNvttLW1nXZ+nw0Oh4Nt27Yxf/58pk2bNmntO2dlwGAw8Pd///esWrWKFStW4HK52Lx5M4888ojw+UrQaDS8/vrrJCcnX3LKgMfjoa6ujg8//JDHHntMmK6Hh4dpa2ujsbGRv/71r7S1tXHjjTcya9asC35WXV0dPp8POBloU1FRwZQpU/jzn/9MVlYWZrOZtWvX8uqrr+L1eklNTSU/P3/CteqJhtvt5vXXX6e8vBy73U5KSgozZswgJyeH7Oxs9u7dS2dnJ0ajkVWrVrFr1y6OHDnCPffcw/DwMEeOHKGlpYVt27axcuXKSU33+TRQWlpKeno6nZ2d/O1vf0OhUOByudi6dSsvvvgiaWlpvPzyy5SXlzNt2jSMRiNdXV2sWbOGv/3tb3i9XjweD4FAgCuuuOLTfp1Jg2She/rpp1mxYgXd3d1kZGSwdOlSkW3icDiQy+UUFxcDcP/99/OrX/2KJUuW4PV6efXVV1GpVNx5550f26X3SUKpVLJ48WKsVivvvPMOHR0dwEk5/N///d/MmTOH0tJSNBoNf/vb33C5XJSWlpKdnS0UoolGXV0dmzdvZvPmzSJN+IYbbhAxQS+++CLJycnceOONJCcn88Ybb1BbW8vdd9/NI488QmpqKmq1mtTUVKqqqvja1772sdsUi8XYunUrTz/9NG63m+TkZFQqFV/4whfIz8+nu7sbu92Oy+XijjvuwOv18qtf/Yo1a9aQkpIiXCw1NTUsXryY0tLSj92m08FqtfLee+/x7LPPjpnf69atIy8vjw8//JDOzk7q6+uZOXMme/fuZefOnXzzm9/koYceIhwO8+6776JWq8nIyOCXv/zlhLfxnJWBlJQUnE4ner2eoqIi/H4/sVgMhUKB0+lEqVSi1WqRyWRYLBbcbrcwV8ViMUKhEKOjo2JnKEWZut1uobVLOaFarZbR0VGSk5M/8YVApVIxe/ZsUlNTx0QoFxUVcc011zB37lxKSkooLi4mJyfnY+XCT506Vfj4NBoNWq0WtVrNggULMBgMGAwGioqKMBgMpKSksG7dukkNEJooSG4CQGRAJCUlYTQa+fKXv4zJZMJisZCcnExKSgo+nw+9Xo9Go8FisbB69WqKi4spKiq6pEy75wrpPeVyOQ8//DAmk4ns7Gzcbrfoq1AohMViIS0tDY1GQ1ZWFrm5uSJ9DGD69Olj0pAuN6jVarKzs1m+fDlZWVlkZmZiNptJS0sjKSkJpVJJeno6GRkZmEwmTCYTt9xyC1qtlqVLl+JwOAiHw2i1WtLT0yc1/36iIZPJ0Ov1pKenc8UVV4gdYXp6OkuXLiUrKwu1Wk1OTg55eXmYzWZuvPFG0tPTJ80CkpWVxapVqyguLsZoNIrsApVKRSAQEPN42rRpZGRkEIvFSElJISUlhQceeACTyUQ0GkWj0UzoDrykpIR77rmHUCiESqUiFotRVlZGXl7eGAuRJGOuvPJKIVdvvfVWTCYTS5cupbCw8LRcBBMBvV7PrFmzuP/++8fM7/z8fJKSkpgzZw4/+MEPyM/PR61WM2XKFLRaLXq9njvuuAO1Wi1cBpOl7J0XHfG6deu46aabuOmmm8RiLhHyeDweNBoNc+fOxel08u1vf5v777+fuXPn4nA4cDgcWK1WsrKy0Gg0hMNhvF4v0WgUl8tFcXExQ0NDdHV1MXXqVAYHB9Hr9ZSUlHyihCHxbFnxk0ryNUlBWxMV7CYF2mg0GmHai2dNi8ViglDDaDReEgJNGrQjIyNCaEt9GYvFsNvt6PV6VCqVyKGPvxZOvvtHMfFdyoj3h49nvJQC3s7E8uZ2u1EoFJdEmunHhZSnHg6H0ev1YvxL80JKudNoNKewzUmEQ2q1ekyk+aWE0wULx0fMS24Bv9+P2Wye1HeU3MPSmJTaJgVXS5Hukvs0XpZK8jR+rE/EpiaeMVaSMfHt8vv9RKNRVCrVaeWrZH2Kz36YDIxv53jmQ+l3SebFIxKJjJGfMDF9Nx7ntbJEo1E6OjrYv38/kUgEk8lEf38/crmc2tpa/H4/jz/++JhrBgcHqampwe124/V66erqEsE9RqOR/Px8HnvsMe6++27q6up4//33ueeee3A6nTQ3N3PvvfeydOnSCX3ps+FMlI/xH2giB8zpWOTi7y+TydBqtRd1jMB4SMLidAxlMpnsFGvK+PeVcLFbQD4O4hf5042nM40xmUx2WVsDxkPaIZ/u9/HzYnyfXWrz5nT4qF2+QqGYkKymC2lL/PxUqVSnBN+dbnxP9GJ7uk1ZfLtO1y/x58vl8k9kszm+nWfqh9PJvE9qA3heT1EoFFRUVLB69Wq8Xi/Nzc1ceeWVtLa20tLSQjAYxG63jwleqa+v56233uIPf/gDcNKf/Jvf/IahoSH+53/+B4Ann3wSm82GTCajqqqKu+66C5PJxOc//3mcTucEvu7pcTqih3M1mHzc2gQf9bwzcX9fSruc8dzxH1WX4EzHLhdcyLc+23i8XPtpPD5qTp6NJ/9M512sONv3/6j2n6lWw0S26VxwploAZzr2cXC6/jmXMXCmegqTgY/Tf5+EXDwvZUDS0lNSUgRxwsMPP8z3v/99FixYQF1dnTDLSXA4HDQ3N+Pz+dDpdBiNRsLhMHa7HYfDgdlsFr5AifAhPpr+k4gAltJl4nm9w+EwQ0NDZGRkoFQq6e3tZWRkRJjEcnNzMZvNH6s2gd1ux2g0olarCQaDDAwMCFOcwWAQXNQSJHeBTCa76IMI4+Hz+YhGoxiNRsEzbzKZTuEvh5PMYIFAgHA4fNnWJgiFQng8HjGeYrGYiIyH/6vtoNFoxvg8XS4XVqt1zC5D8qtfCgvcx4WUOqhUKvH7/QwNDYn+MxgMIsoeoL+/n0AgIPolHA6TnZ2NVqu9JCxOknywWCxj3IV2u/0jv7ff7yccDk9K7Qqn08nQ0BAqlYpwOCzYMb1er6g3otFoRFDheLjdbuD0FtGPg1AoJNzOktzo7u4mEomI/otEIuTm5qLRaMYoAxL/wenqpEw0QqEQQ0NDIuPB7XbjdDoFJ0Y0Gj2t7Pf5fAQCARQKxaRZBs9ZGTh69Cj9/f20trbS2dlJQUEBMpmMgYEBqqurGRwcpKenh9bWVuRyOf39/QwPD5Oens7ixYv59a9/zeLFiykqKqKiokJQ/S5ZsoTk5GQyMjJob2+nv7+f+vp6FixYgN/vZ2BgQCzKk4FwOIzVauXv/u7veOKJJ0hLS6OlpYUjR45QVlbGU089xd/93d8xODjIgQMHaG9v59Zbb+Wxxx6jqqqKefPmMWXKlHN+ntvtpquri4MHD1JfX89Xv/pVysrKGB4e5plnnkGr1RIOh5k1axazZs2iuLiYWCxGR0cHb775JoODg4J/+5vf/OZFuwjEYjG6urqoq6sjPT2d4uJiZDIZzz77LPPnz6e5uZmcnBzmzZsnWBy7urrYunUrzc3NRKNRLBYLjzzyyCURJ3E+GBoaoq6ujurqauHvvuGGG5g+fToej4f33nuP5ORkZs+eLZS+cDjMvn372LFjBwqFgkgkQjQapaysjC996UsX7TiYKGzcuBGlUklhYSGZmZkcOXJERFdrNBpmzJjB5z73OXH+K6+8IojBotEoTU1N/PKXvxyjMFyMGB4epqOjg2PHjlFfX8+PfvQjdDode/bsYfPmzSiVSgYGBvjhD39IVlaWWLykRW3Hjh3I5XIKCwspLy+f0LaFQiEOHTrEq6++SnZ2NqFQiLvuuou+vj7q6+txOBxEIhHKy8tZtWrVKX3d0tIisszuv//+CWmTFJv0+uuvMzw8jEwmQ6FQ8Oijj/LMM88AJxXmQCBAZ2cn//3f/y02q319fezcuZMPP/yQBx98kNLS0kkLzoOTVvLNmzejUqloaGjg0Ucfpbe3l4MHD+LxeJDL5bS3t3PDDTeIIPJoNMrBgwcFY2kkEiErK4sVK1ZMePvOWcoajUbuu+8+pk2bJgJENBoNt99+O1OnTiU/P5/p06eTlZVFNBrltttuo6SkhKSkJFQqFT09Pej1evR6PXPnziUvL4/R0VFUKhUrV64UkePp6elCs/v85z9PeXn5aTXMiYLP56O5uVnkfw4NDdHf34/f7yc1NRW73U5XVxfBYJBIJMLIyAjZ2dmEw2H6+/txOBzn9TylUonRaCQzM5O33357TG0DmUxGZWUlkUiEgoKCMZGto6OjFBQUkJGRQV9fH7t37+bBBx9EqVRedAtBNBolEAjwwQcfUFhYKGIHurq66OjoEIVMBgcHqa+vZ9myZcDJnW9GRgYajQaXy8Ubb7zBQw89dErO+KUOyfJRVlaG2WxGrVYLAqKmpiYCgYDoh/gdTCQSoaqqCqVSSU9PD4ODgxQWFl5WfTMe4XCY2tpaPB6PiLyOxWK4XC7KyspISkpCrVafkruemppKUlISZrMZp9NJb2/vGHrnixUS9XBKSgpNTU1jeAMKCgqwWCwcOXJEpObGWwg3b96MXq8nLS1tUiyHsVgMpVKJxWKhsrKSaDRKUlISXV1dqFQq8Vt2dvYYX71EOjQ4OEhLSwvZ2dkT2i63201ubi5paWkMDw+zfft24CSbrMViQa1WMzIygtVqHRNIKmWZWK1WYVWYLESjUdRqNZmZmaSnpwu2SKmdkqWkvb0dk8kkrALRaJQdO3awatUqUeBox44dn64ykJ+fz7e+9a0xPh+tVst9990nzJZSJ0ejUaGVSnSRbrebYDCIxWIhNzeX0tJSUXpUKrqQm5vL0qVLxTPuvvtucY/JQDAYFGYvqaBOW1sbdrudjIwM8vLyKCgooKenB7PZjMlkEguTRFpxvm4CjUZDbm4uJpOJ5557TvyuUqnIzMxk2rRphMNh0tPTx0xorVbLVVddhU6nY//+/WzatIlIJHJR7prD4TBdXV1UV1czc+ZMkUozODiI3+8nNzcXq9VKfX09DQ0NQhlQq9XCUtTX18ezzz47hkXucoJOpyMvLw+NRoPZbMZisdDY2MgHH3zA7NmzSUpKGuMik8vl5OXlUVFRIbj5m5qaPtHg2k8aUsnXN954g7lz52IymUTWgEwmY+bMmWg0GoxG45iytQDLli3DZDKh1WppamoiJSWFpKSki95FILnPDAYDzz77LHBSnhYXF1NQUEBqairbt2/H6XTi9/tJTk4mGo3i9Xp58803ufvuu0lJSRGpaDDxAc+lpaWi2mhKSopQQCorK/F4POTk5Jyyw5aYExUKxYS7fuVyOUuXLiUUCnH8+HH27dsHnMx+y8nJIRAI0N7eTk5ODlqtVjzfYrEwb948YbKfTMRiMTIzM7niiitQqVSCsCk3N5fCwkIKCgqwWq3YbDbKysqEtTQWi1FTU8M999xDRkYGTqeT119/fVLaeM4ryekWHZlMdtrF8HRRp+M1VZVKdU68zJOFWCzG0NAQw8PDogqXpL263W4yMzNFRLzT6USr1eL3++ns7OSFF17gwIEDPPTQQxQWFp7Xc8+UkihVIDt8+DD9/f3cc889rFmzhoyMDGQymVCYQqEQcrmcgoKCMTvHiwlut5s333wTvV7Phg0bKC0tZerUqaSmptLQ0IDT6aStrY3e3t4x+cZlZWXASWUiEolQVFQ0ZvJeTrDb7WzZsoXa2lqWLVvGrbfeSkdHB++88w6pqanU1tZyyy23UFxcjMFgQKlUCk7y3t5eAoGASNO9nOH3+3nttdewWCw0NTVRXl7O7NmziUajvPbaaxw9epTS0lLWrFnDjTfeKOZDSUkJ0WiUrq4uduzYwTe+8Y2LXhGA08s8iXNEihsIhUIUFRUJ+RkKhWhoaMBms/Hee+9RV1dHaWkpN9xww4RuFqLRKAMDA2zZsoV33nkHjUbDv/3bv+H3+2lsbGT37t0cOnSIb3zjG6xcuZK0tDRisRjhcJjdu3dzxRVXkJqaKmTtRMxrabMpuXFPnDjBsmXLiMVilJeXCxfRkSNH+MpXvjKpmQ1ng0KhQK/Xi2JtarUai8VCYWEhcrlcVHRdvnz5GJkYi8UYHR0V6YUymeyMRY0+Li4/KXuOiEajtLa2cuDAAVG04vjx44KoROpwKW9WqVQKQo3vfe97fP3rX+epp57i1VdfnZD25Obm8rOf/YynnnqKe+65h+7ubqqrq085r7q6mqamJn7yk59MyHMnA36/n9raWq6++mq+9a1vMTw8zKuvvkpOTg7r16/nV7/6Ffv27UOr1QoFIB6NjY1s3LiRX/7yl5dl9cKCggJuvPFGfvGLX/Duu++yc+dOtm/fzvDwMHl5eXzta18jLy+PN998k7q6ulOu37RpE8PDw6xZs+ZTaP0nB6/XS0dHBxaLhS996UtUVVXR0dHB5s2bWb16NT/72c948803MRgMbN26lUAgMOb6jo4OmpubKS0tvSQUgY+CxFK5fv168vPzhSIYCoWora1lxowZPPjggxQUFLBnzx6xQ54oaDQa1q5dy+9//3teeuklVCoVdXV1lJSU8J3vfIdf/OIXPP300zz77LN0dnYCJ62vkkurubmZ4eFhbDYbXV1dE9o2vV7PwoULmTVrFn/5y1+Ei6W+vh6r1UphYeGnPgakAPxrr72WcDjM22+/zfHjxwmFQthsNtrb28nLyzslHTIQCAgrj0RBPRn4zCoDEkGGSqXixIkTeDweGhsbRUCS1WolFoths9nIy8s7xYohRSZPBLxeL06nUwyCzMxMMjIyTmHDqq6uRiaTsWDBArKysi5KqwD8X9EPyW+bmZkpynR+5Stf4Qc/+AGFhYUUFRWxZMmSMddKFSEljvHLEcFgUNBQy2Qnq5JlZGSIErEqlUoE0Ho8njHXvvnmm6SkpIiAzMsZ0jiSsnYqKipIS0tjaGhIxNrIZDJRdjw+i0kKdqupqWHdunXi3EsVNpuN1tZWYrEYK1euPKUuikajIS0tTcRPFBcXMzw8PKFtcLvd+P1+NBoNcrmcnJwc4c6Sdq7p6eljLFbRaBSfz4dGoxHKwMjICL29vRPSplgsJuJBJLr26dOni+j7bdu2MTAwwPLly89olf0kYLfbGR0dFTU1li1bhkKhIBgM0tHRwVNPPcVdd90lWHzjIbmmY7EYarX6FJfYROHiczh/QtBoNEydOhWz2UxzczOBQAC5XE5ZWRk9PT0cPXqUqqoq4ePu7++nr6+Prq4utm3bRmtrKytWrGDOnDnn9Vxpchw8eJD+/n46Ozsxm834fD4+/PBD8vLy6O/vZ8qUKaSkpHDo0CE6OjrIzc3lpZdeEjSWRqORNWvWMG/evItu96zX61m3bh3V1dXCv5uXl4fRaKS/v5/GxkZmzpxJSUkJcrlc1CLIzs7m3XffFRz0Op2OdevWUVVVNWk0oZ8Guru7aW5uJi8vD4fDwfLly5k+fTpDQ0MYDAbq6uqoq6ujqqoKrVbLvn37GBoaYvXq1bzzzjvcdtttnwllQK1Wi+I3DQ0N9Pf3iyJX27dvZ8qUKYyOjoqgLJfLxZNPPslDDz3E3r17sdls5OfnX1I1CaQg5UOHDjEwMEBHRwdpaWns3buXTZs2odPpqKmpoaioiKKiIpRKJTabjQULFvDUU0/R1NTE8PAwsViMqqqqCW1bT08PVqtVmPeLioooLi6mo6NDtKmnp4dbbrkFi8XCrl27aGlp4eabb2bFihXU1dURDoeJxWITSgZVX19PKBTCYDAQDAYpKiqisLCQLVu2AP+3cYvFYvj9fl544QXmz59PeXk5vb29dHZ2cuTIETIzM9FoNJMiT4PBIC0tLbS3tzNz5kxGRkaYNWsWWq2W1tZW7HY7ubm5om8PHDjAkSNHuOOOO1i2bBm1tbU0Nzfj9/tZuXLlhLcPPsPKgEqlErz5sViM9evXU1FRQUFBASqVSgToTJ8+nbS0NILBICUlJWJxs1gsTJ8+/YIrcGk0GlauXClqNajVahE5nJmZSXFxMTqdjs7OTqEZ5uTkEAwGhdZ9sS4GOp2OxYsXs2PHDuH7NxgMaDQaQqEQSqWS8vJykXokpQPJZDLBaW4wGAiFQhftO34cSNSoUl72okWLRBXMxYsX4/P5SEpKYubMmcjlcsFHACd94YWFhZcUz8SFQoo1WrNmDZFIBI1GQ3Z2NhkZGTQ2NgrrgDSWZDKZ8JErlUqKi4svSQ4GuVyOwWBgzZo1YmHS6XRkZmZisVgIBoPI5XLxR61WU1xczLRp05DL5aI6aEFBwYS2S6PRoFQq8fl8qNVqZs2aRUZGBjabDbvdTiAQQKPRMG/ePHQ6nWhbcnIyJpMJl8slouInMlXcaDRis9kIh8MYjUbmzp0rsghmzpwpMm7iqXylMaFSqVi0aBFpaWmTGowt0c1Ho1GCwSB5eXlMnTqVcDiMy+Vi/vz5Y6wCcrlc8OysWbMGr9dLJBIhJSVl0tJjz6s2weUIKWVLyt2WhG4oFMLhcIgAPokMSCI5uVCTk8RJLQXQxPPTezwewuHwmAJN0ueJr40gk8kEmcbFyt0v5T1LxUukfG+Xy0VSUtJp2bUutXe8UEhR8jabjYyMjDHCSeK9SElJEcJgfO2GT9Pc+WlhcHAQo9EoAkqlYN/U1FRUKtVl00/x8kGSSePpc+NlUfyxSCSC3W5Hq9ViNBon5d19Ph8ejweDwSAWr3A4LFxa8QvV+GyGcDg8hmN/In34drtduJXiXRSnGwPx40SSw/HnTtaYCYVCol5GPJlUPMYzI0r/dzgcKBSKMTVsJhqfeWUggQQSSCCBBD7r+MwGECaQQAIJJJBAAieRUAYSSCCBBBJI4DOOc46Y2Lhx42S2I4EEEkgggQQSmARcd911H3nOOSsDE5UXmkACCSSQQAIJXFxIBBAmkEACCSSQwGcciZiBBBJIIIEEEviM4zNLOnQm+Hw+XC4XbrcbhUJBLBZDpVLh9XoFS2E4HCYnJ0dQx14IYrEYdrsdk8l0yj3sdjt6vf60RWi8Xi/hcJikpKQLeu6nAZ/PRzQaFQRPIyMjgvb5dDmzfr8fr9crSllfrojFYoRCIQKBAFqtVowDiXNCo9GcUuXN5/Ph9/tRq9WizOnljEgkQm9vr8i912g0mEwmwUjpcDjQ6XSnMNo5HA48Ho8grtJoNKSnp3/q/PTni9HRUfR6/WllhPReErtee3v7GJmVkZEx4WWbI5EIgUAAt9tNeno6MpkMt9stqIrhJMFOSkrKKfJLouBWKBQTnisvUXxHo1FR8Q9OyhKJ2388ja9URGloaIisrKxJ5zOJRqOiDkE8GVYoFBIEWiaT6bQFnOK/92QxaiaUgXFoaWnhyJEjtLa2otPpGB0dpaioiKSkJFwuF52dndxwww08+eSTzJgxg9mzZ1NcXHzO9/d4PPT09FBXV8eJEye4++67KS0tBf6veNIf/vAHbr75ZhYuXAgg6rcfPHiQffv2odFoeOSRRybl/ScKEmf48ePHSUlJoaCgAKVSyQcffEB2djZHjx4lIyODOXPmCKISv9/PwYMHcTqdgor5/vvvR6lUXnLkMeeCcDjMv//7v7NixQoqKytJT0/H6/Xy4YcfYjQaqaysFEpfJBKhu7ubDRs24Ha7UavVFBYWcuedd37KbzG5CAaD/OlPf0Kj0RCNRsnPz2fGjBkYjUYaGhpEDXuLxcLy5cvFdXv27KGjowOPx0MsFqOsrIxrrrnmklAG/H4//f39HD58mMrKSnJycoQyEIlEeOuttzCbzfj9fhQKBZmZmUydOpUnn3wSs9mMQqEgKyuLm266aUJ57F0uF/X19VRXVwtCpHvuuYf29nbq6upEdb2ysjJWrFghqu9FIhHee+89qqurWbJkCfPmzZswFj1pU7Vx40asVqtgoXzwwQc5evQoHo8Hp9OJ2+0mLS2NFStWiMW2vb2dzZs3o1AoaG1t5atf/SpTpkyZlDESjUY5evQo77zzDnK5HJvNxoMPPohSqaSlpYX6+nqGh4eZP38+ixYtGtN34793VlYWlZWVE97GhJtgHILBIFqtlsLCQvLy8rDb7SQlJaHT6fB6vfT19ZGRkYHdbqejo0PU6T5XSBSdWq2WY8eO4Xa7gf9jQuzp6aG2tvaU+0oUpcPDw7S0tEzY+04GpFKr27dvB07ShUr0uzU1NaLISm9vLw0NDeI6m81GU1MTAwMDorBJMBg8haXrckAgEKCrq4umpiZGRkYIhULY7Xbq6+txOByYTKYxSpAk9FJTU8nJyWF0dJQ9e/YIrvfLFbFYDLfbTU5ODvn5+WRmZqJQKDh27BhWqxWdTsfQ0NApVfAcDoeoG5+fn096evolUQo7HA4zODhIdXU1ycnJ6PX6MWyk4XCYLVu2oFQqSU5OZnR0lJ07dxKJRIhEImRkZFBQUEBWVtaE0+tKO/+MjAyysrLYs2cPXq9XWGDy8/MpKCggPT39FEuG0Wiku7sbq9Uq7jNRcLvdmEwmsrKyUKlUolrjvn378Hq9mM1mlEolW7ZsGcN2KhX+yc7OpqWlBZvNdkrly4lCKBQiGo2i1+vJy8ujpaWFrq4uIeczMjKwWCwcOnQIh8MBnP17TwYu/tnxCSMlJYVFixbxxS9+kZtvvpmpU6eyYsUKUdRIo9Gg1+vJzs4eM1HPFVqtloKCAlasWDHm2kgkwujoqKDHHL8TNhgMLFy4kLKyMvR6/YS862QhHA7T19fHtm3byMjIEALc6XQyODhIfn4+8+fPR6lUjinR63Q6cTgceL1elEolaWlpRCKRy26xi0ajeL1empqayMjIQK1WI5PJ6OrqYsuWLSQnJ5OdnX2KKVWlUnHnnXdy3333UVlZidVqnbTa5hcL5HI5eXl5LF68mKVLl1JVVUVaWhr9/f0EAgFUKhU6ne4Uk7ROp2Pq1KksW7ZMlLadTO75iYLT6aS5uZndu3czbdo0TCbTKXKirq6OvLw8Kisr0el07Nq1C4Dp06ezYMECli9fzty5cyeluFdRURHr169n5cqVoj81Gg25ubmsWLFC9HX8s+VyOcuXL6e4uHhSXFuxWIw1a9Zw7bXXMmvWLNFfNTU1JCcns2DBAmbOnMnevXuFLInFYqSnp3PVVVexfPlyioqKBLXyZCAcDpObm8ttt93GXXfdRWFhoTD9l5WVce2117Jq1Sr8fv+YNpzue+/evXtS2njxz45PGJLJPxAI0N7eTk5ODgaDAY/Hg8/no7W1lWeeeYYDBw7wrW99S5j4zxVn4sp2Op1UV1dz1VVX8dvf/lb8finyq7tcLjZs2IBWq+XFF1+kvLyc0tJSDAYDer0emUyG2WxGJpMxMjIirpsyZQrRaJTNmzezY8cObrzxRlHw5HJCMBgUFiGTySRqX7S3t/O3v/0No9FITU0Nn//85ykqKkKv16NUKpk5cyZwcpchKaQTWf3tYkQkEqGxsZFDhw5htVpZvnw5X/jCF1i3bh233XYbb775JrfffjsrVqwQ8wVOuuNqa2t54YUXaG1t5bvf/S6rVq06bRzOxYSjR4+yZ88e5HI5jz32GMuWLWPJkiWkpaWJgl4+nw+bzSbclh6Ph0gkwq5du9i4cSNKpZKqqir+8R//cULnTnp6Om63m/b2dt544w3WrFmD0WjE5/Nx9OhR/n/23jM8rupc//5petFIGvXeu2VbtuWGuw0G0zEEMIEUOIEkEBLCSU7+6SfkpLdzUkgIKQSSQEIJGMe44V5ly1bvvY9mRhpN7+8Hv3tFsg2xQQLZ6L4uX7ZH2rPX2nuVZz3lvvfu3cupU6d4/PHHWbVqFXFxccD0CqpFRESQlZXF8PAwx48fp7m5mXXr1gFnDSu/3y8EnSZusnK5HL1eTyAQ4OWXXxaHj+nKw9Hr9SJnKhQK4fV6yc7OpqCggEAgQG1tLb///e/5+Mc/TlpamhjLF3rf0tox1Zg1Bt4CVquV3/3ud3z3u99FqVRiMpnQ6XSUlJTwX//1X+zatYunnnqKDRs28MADD7yre9ntdvr7+xkaGqKpqYnx8XEGBgYwmUzTplA1nfB4PJw+fZotW7awcOFC/vjHP3Lo0CE++tGPEgwGAYToxsRkGLPZTFpaGrfeeitxcXF861vfYs6cORQXF19WMrT/DvX19dTW1grZ4s7OTrRarfCafOITn+C5557j1VdfZc2aNVx11VWTrt+6dSsKhYLHH3/8ferBewedTsd3vvMdtFotu3btoqWlhRdffJHS0lK+/OUv43a72bFjB3V1dXz3u98Vp9XbbrtNbADt7e18/vOfZ/HixTPeGOjr62NsbIybb76ZJUuWcMcdd2AwGFixYgUqlQqFQsH//M//8Oc//5moqChkMhmlpaXo9Xp++ctfolKpePnll0V+0fLly6e0fUqlkuTkZD784Q9z//33k5OTw5w5c1i+fDkKhYLOzk7+8z//k8zMTGEMvBfQ6XQsXboUjUbDT37yE5YsWYLT6RTiZzKZ7IJJ1xqNhhtuuIGmpib++c9/snLlShYtWjRt7XS73ezfv5+bb75ZKNP6/X5ycnJ49NFHeeSRR/jWt77FypUrkcvlb/m+pwOzxsAF0NHRwZkzZ1i8ePF5rkVJRU9K6pkKF7aUUa5UKmlsbBTudIvFclkaAxEREahUKuLi4oiKiiIxMZHx8XER35XUC9Vq9SQJ6GPHjqHX6yktLSUxMZEtW7bQ29srJs2VAkkKVtKe7+npISMjA4VCQVRUFEqlkkWLFvHyyy/jdDonXbt//36SkpJITU2dUhnYmQjJgyJ5keLi4khISGBgYIAdO3bwjW98Q3iXvF4vTqeTqKgo/H6/UCDVaDQkJiaSmJh4WXiYFAoFOp2O+Ph4DAaDOCV6vV5UKhUymYwVK1Ywf/589u3bx/j4OBUVFYyOjmI0GoWEcVJS0pTLXFutVuHVi4yMpLS0VCgWSjkuSUlJoorhvUA4HGZoaAij0UhcXBwZGRkUFRXhdrtFuFVSeJSUAgGR7BgdHU1CQgLLli1jeHgYn883bW212Wz09PQQDAZZvXo1er1eeC/i4+MxGo1CrVTaVy70vqXE8qnGrDFwDjweDy0tLRw/fpxPfvKTwk0vbdD9/f0cPnyY9vZ2li1bdslZnaFQCI/HQ01NDSaTib6+PpKSksjIyECj0VBTU4PP5yMiIgKn00ltbS19fX1s3LiR/v5+ent76evro6GhgZKSkhkZQtDpdKxevZpTp04JedmsrCxSU1PRaDR0dHTQ1dWFUqmkqKiIhoYGuru7iY+Pp6+vj87OTgART7vSXOGpqanIZDKGhobw+XxCh11yXTY0NNDY2EhJSQlqtZrTp08zPDxMUlISzz//PFFRUcTExBAXF8fixYspLy+fkePg3UIyGo8dO0ZycjIDAwPExsaSnZ3NyZMnqa2tJTY2lujoaDQaDX6/n1/96lfce++9HDt2DJVKRXR0NCaTiTvuuOOyGEe5ubnY7XZOnDiBTqcjLS2N2NhYmpqaaGtrY/PmzXi9Xrq6ukSoKDMzk+bmZpFw6na7yc7OJjU1dUrb1tfXh8lkQqFQEBMTIxIGe3t7qa+vJzMzk4GBAW644QaMRiMnTpygp6eH22+/naGhIfr7+1GpVCKPaKreR1NTE8FgEL1ej8fjEcnfixYtYnBwkKNHj+L3+1mzZg1er5d//OMfIvzb1dVFaWkpdrudkpISMjIypqRN52J8fJzKykpee+01VCoVLS0t4iCkVCpJT08nFApx1VVXkZiYSG1tLU1NTRd835camr5YzBoD50DKME1ISCA7O1t8rtFoSEpKori4GJfLhVwuZ8WKFWRmZr6je/j9fsrLy9FqtSgUCuLi4oiNjWVsbIw1a9ZQXFyMwWDA4XBgt9uBs3kMaWlpKBQKUbM7E6HValm5ciV79uzB6XSSlpaGXq8nISFBuO9kMplYyHp7e7Hb7cybN0+c8DweDxkZGeTm5k6bfvf7hdjYWCIjI9Hr9SxdupSUlBTS09MJBoMsXLiQsbExIiIimD9/vihDcjgcREVFiaRVqS55Jo+DdwuZTIZCocBqtaLVatFqtaSnp5OVlYVKpRIbU2ZmJrGxsSiVSiwWCxEREXi9XsELEgqFWLdu3WUxjnJycgiFQlRXV4tTf1JSEt3d3SLB2O1243Q6SUlJITU1VdSmj42NoVAoiI2NJTY2dlK9/VRAJpPh9/sZHx9HqVQyf/580tLSsNlsOJ1ObDYbPp+PlStXotPpaGtrw2azifUuNzeX2NhY5HK5cN9PBeRyOWNjYwQCAXQ6HfPnzyc+Pp41a9Zgt9sFV8OKFSsIh8OMjY0Jj6vVahWlzEVFRdPmbZOqPcLhMAaDAYvFQmRkJFqtVlQKKZVK1qxZQ0JCAhaL5W3f93Rglo74HITD4UkuGglSKYpMJntXiX3S90tVA9J3Sf+W3JsXuoc0gaSEM7lcPmNPhOFwGLfbjcvlQqfTiQqIcDiMyWQiKioKtVot+nrudU6n84p2g08cA6FQSLzrYDCIyWQiLi5OeFWkMTNxXErXS2Nnpo6DdwvJOxAMBkWJKpx9fh6PB4/HIwi6Jo6jQCCAw+EgGAwSHx//fjX/HSEYDOLxeHA6ncTHx583R2w223lVBuFwmJGREUHANF1uemlu6vV6NBqNyMD3eDw4HA6Sk5MntUmCNFYnjuGpHLNSZv65lSXj4+OEw2FBzjSxXYFAALfbjd/vJzY2dtoJh6Q5LBlD0hovlRVLoayJzwku/L6nA7PGwCxmMYtZzGIWH3DM/IyaWcxiFrOYxSxmMa34wOcMSO5Wp9NJZGQkMpmMYDAo+KKlDFSTycT4+LgoV0pISBAZtO/0vna7XdSQS585HA40Gs15nPRw1n0o1RRLNKOXg3vY4/EQDocnVQR4PB4iIiKEK3wifD4fXq932mJj7zf8fj8ejwebzSZcwEajEY1GQyAQwGazibryt4LP58Pv938g9AkkSOxwEt++FLuWSu7OhcvlwufzodfrLztKayk8MpGrPhAIYLfb0Wg0IsQmQVrHxsbGUKvV6PX6ae1vOBw+z309sYZe0tWYCIvFItz1U00AJc2pcDgsSgiHh4cJBoPC7R4KhUhISBAkX3D2Odtstgs+06mGxCg4Ojoq5vfEMAvwlu9tfHxcrJfTlQj7gTYGLBYLfX199Pb2YjAYWL58OcFgkK6uLpqbmwkGgyiVStatW4fZbKaxsRGz2czChQs5ceIEeXl55ObmXlL5n9frxWw209XVRWdnJxs2bCAlJQW73U5tbS0JCQn09vaSlZUlWA4lI6GmpgaFQoFSqWR0dJT169dPIlqZSQiHw1gsFnp7e0WplJQsU1NTIxjAkpKSxAR0u9309vbS0tKCyWTi/vvvf597MT2w2Wx0dHRQV1eHSqVCqVSKcqHKykr8fj+BQIBNmzaJmLEEn89HW1sbXq8Xo9H4gTEGqqurCYfDxMfHExMTQ0dHBy0tLdjtdjIyMsjPz5+U8NvQ0MDQ0BCjo6M4nU6uvfZa4uPjZ7w2gd1ux2w209vbS2dnJ3fddRcajYbh4WEGBgbQaDS0tLSwaNEi4uPj0Wg0hEIhHA4HJ06cID4+XiQ4S2NqqtcHt9tNdXU1IyMjrFmzhqioKJxOJwMDA9jtdrKzs1EqlUI0KRgMsm/fPhISEhgfH0ev11NYWDglDImSqFdlZSVjY2Pi0HHdddexc+dOQqEQCoWCQCDAyMgIDz30kDAmR0dH6ezsRKfT0draypw5c0hOTp42hteBgQGqq6vx+XyMjY2xadMm5HI5AwMDdHV1YbPZKC4upqioSBg0oVCIyspKlEolfr9fkCNlZWVNefs+0GECu91Oe3s7e/fupaqqCr/fL4SE6urq6Ojo4Pnnn2d8fByXy0VXVxdHjhxBq9Vy4MABjh07Rn9//yXd0+/3Y7VaaWho4B//+Acmk0lkuG7duhWn08nJkydpbW3FZrOJ6zo6OqisrKS/v5+RkRF27tyJ3W6fkVS9kgVcW1sruPeDwSChUAiTyURNTQ0DAwMiI16C3+9ncHCQI0eO8Pe///19av30w2az0dnZSWtrKz09PfT39+NwOBgcHOTYsWO0t7fz3HPP0dnZeR6Pe3t7O01NTfT39085x/tMRCgUYnh4mNraWvr7+0WlSUNDA62trRw9epTdu3dz5syZSdd1dHTQ1tZGU1MT27Zto729XRBezWS43W6Gh4epq6vj5Zdfxuv1EgqF6Onp4cSJE3g8Hk6cOEF9fb3gsJeIlY4ePYrdbqe5uZnDhw9PC1OdRJt+8OBBDh48iNPpxOv1YjKZOHPmDL29vZMOKMFgkLGxMf75z39it9tpa2ujurr6PC2Jd4OxsTGam5tpamqiurqaF198ETjL5tjW1kZnZyeNjY3s27dPJGFLa9Hhw4fx+XxUVlZSW1vLyMjIlLVrIqQEz6qqKvr6+vjzn//MwMAAIyMjdHV10dLSwqlTp9i3b5/QK5AMqddffx2TyYTJZKKlpYUTJ05MSxs/0J6BrKwscbKSBqfP52Pu3LmsXbuWQCDAXXfdRSgUIiYmhqSkJIxGI0VFRZSXlxMIBPD7/Zd0T4lUJz09nTfffFN87nA4OHXqFF/+8peZP38+ERERjI2NkZKSQjgcZtu2bRQUFIj7qtVqamtrWbJkyYwjU5Hclc8++yxf+9rXyMjIQCaT4fF4+Mtf/kJxcTGLFi0iLi5uUtsNBgOrV6/G4/HQ0dHxPvZg+pGYmMinP/1pIasrZWl/9rOfJSMjg8cff5yenh6SkpLIzs4Wmcg///nP2bJliyhLlYzBmegdereQyHYkSuuFCxcSHx+P1+slNzeXu+66i9HRUf73f/+X06dPc+utt4pry8rKWLp0KYFAgDfffJP29nYWLFjw/nXmIpGQkEBMTAzp6ens2LEDOGsgjIyMYLFYmD9/Pm63mz179hAbG0tycjJut5utW7eycOFCysrKBH1tfX09S5cundL2ORwOhoaGkMlk4oQ9ODhIfX09vb29PPLII5NCMhJVsUKhoLS0lOjoaEFdPFVMel6vl3vvvRe1Wk1dXR3f+c53ANiyZQvZ2dnI5XJ6e3s5deqUCLtIz2hgYIC5c+cKZkCdTjctp+5gMEhWVhYf+chHSE5OprW1Fa/XS2RkJOXl5Vx//fUMDg7ygx/8YJIR5/P5OHDgAA8++CCJiYns37+fZ599lg996ENT3saZtYu8Dzh3EU1JSUGv19PU1MRPfvITbrnlFhG7drlcNDY28v3vf58dO3ZQXl7OnDlz3vU9AWJiYlizZg3r16/njTfeICEhgeLiYvH76enp1NXViXrjhoaGGesZsNlsPPvss2g0Gn7xi1/wzDPPUF1djdvt5qmnnqKuro6nn36a7du3Mz4+/n439z1HKBRiYGCAH//4x1xzzTV8//vfp7+/n+TkZMFb4XK5yM/PF+WVwWCQM2fOMDg4yN/+9jeefPJJ/vGPf8zI9z+V8Hg8PPXUU4K7fdu2bQQCARYvXgyAyWQiPT1dzBUJWVlZWCwWtm/fzoEDB7jllltmPBWxhHPXB5PJhMPhELoeKSkpWCwW4VmTy+VkZGRw+PBhRkdHGRgYoLW1dVo8AxaLRRhWUjt3797Nyy+/TDAY5Ktf/Sq1tbWibSqVitTUVE6cOIHdbhcem6lsW25uLk6nk+3bt7N7925uueUWAMrLy4mJiaGtrY0jR46wZcsW0WaLxcLo6Kg4DCYlJWG32wWny1RDLpdjMBjQaDQ888wzqNVqUlNTycvLIyYmhhMnTvDNb36Te++9d5IxolAoGB8fx2w209bWRnt7+ySP8VTiA20MXGhTlpI0kpKSuPXWW/nHP/5BfX29oNMtKCjg4Ycf5r777uO5555j69at7/qe4XBYJM1997vfxWKxsHPnTiHFCXD99dcTGRnJgQMHeOWVV4CzKmUzMQbq9Xqpqalh3bp1PPjgg5jNZp555hna2tqIjo7mzjvvpLi4mM7OTrZt2yauuxxFmd4J0tPTue666/ja177G888/z9GjR2lpaRGJRPv37+faa68lMzNTJAsFg0FqamrIy8vj3nvvpaioiMrKSk6ePPk+92b6IOWQSGOmtLSUnp4eMef8fj979uyhuLiY66+/ftK1ERERJCUlsXDhQioqKvjKV74ybQIvU4kLjf9gMEggEJik6yGRlcFZkq8bb7yRUCjECy+8wIkTJ9BoNOcZSO8WtbW1tLe3o9Fo6O7uxmw2CzrtUCjE5s2bufPOO/nRj35Ee3s7cNYYyMzMZNOmTUKjBKCwsHBK2iStGVqtlvLyckpLS3nllVfo6OggGAzS0tKCxWIhPT19UtJiKBSa9EwVCsW0JDae206dTsf69esJBALs3LmT5uZm1Go1mZmZ/Md//Af/8z//Q319vUh8VCgUfOlLX+Lll19m27ZtWCyWKXt25+Kiez44OEggEBAdio2NnZYGvd+QTqrR0dFotVri4+Px+XzC9aVSqYiJiSEnJ0e4dt8tnE4nVqsVtVrNwoULcTgctLe3T8pHiImJ4YYbbsBqtdLT04PH45nxGu3JyckkJycTFRXF0NAQXq+XqKgojEYj+fn5WCwWBgcH3+9mvi+QdAgAQacrxYudTidLliyZlEkOZ43GuLg44uLiRDLd0NDQ+9WF9wSSwExMTAx5eXlYrVYGBgYIhUK8+eabzJ8/n/z8fOG9k+KsbrcbpVJJVlaWUMK8HHIGLgQpY18i0LHb7SQmJopTrcS7f9ddd2G32zlz5gw+n2/KyZakSoGxsTH6+vqwWq1CF0Kr1ZKamkp8fDyjo6MifBoREYFarebWW2/FZrOxf/9+NBoNCxcunJI2hcNhrFYrOp2OxMREQd/scDjw+/1UVlYil8tZs2bNJENLr9ejVqtF3oXdbicuLm7K9RwkSF5crVZLSkoKc+bMwe12YzabSU5OJi4ujsjISEKh0CTZdplMxurVq8nLy6OmpgaXy8WyZcumpY0XbQy43W527txJXl7eJfPxz1T4/X7sdjtDQ0OMjIxgt9sZHR3F4/EI+tPs7GyMRiMul4vx8XFGR0dpa2tjaGiIgoKCSUI7FwOJmrOvr098n8vlEqyCEhuWw+FApVLR19fH6OgopaWlxMfHEwwGSUxMZOXKlYIBbKZBpVJRXFzMwMCAkNlNTU3FaDRiNBoZHh4WZZUqlYqBgQEsFosQGDGbzdhsNvr6+khLS5uRfXw3sFqtDA0NiXhvWVkZUVFRtLe3c/DgQXw+H0qlksHBQYxGI0qlkrGxMbKzs+nu7sZisQjmvfdSGe69hmQwGY1GMT81Gg0xMTFUVlayc+dOli5dyvj4uMitqK6uZunSpVRXV6PVaomNjcXv9zN37txpO/VNJUKhEC6Xi76+Pux2O1arldjYWKFuNzw8TGdnJwUFBcjlcrq6uvB4PBQWFpKSkkIwGCQ/Px+NRjPlJWhxcXH4fD6CwSAOhwOn00kgECAxMRGVSkV3dzdqtZqcnBxUKhUdHR1YrVaRHxQMBsnOziY6Opq0tLQpa1dnZycajQatVovP5yM7O5uoqCiampoYGRkhMzNT5F4FAgFOnTpFQkICkZGRBAIB8UzT09MnMShOJaR1zeVyiSoxaZ1vaGggNTWVcDgs8ir6+voYHh5m4cKFGAwGIcSUmJhIeXn5tLTxomdHZGQkv/3tb7nvvvtEvO5C8cqJC/fEn0ufn/vZud9x7mdvtREEAgHC4fC7ot30er3YbDaGh4cZGxtjbGyMwcFBBgcH8Xq9pKamUlBQQE5ODi0tLaJu+eTJk/T19XH11VdfsstGsq6bmpqIiIjAYrEQDodJTExEoVCIkqnS0lKMRiPNzc00NDRQUFBAd3c33d3d6HQ6brrppnfc7+lGZGQkmzZt4qWXXhL82yUlJeTk5FBQUEB7ezt9fX0kJyeTl5dHW1sbZ86cISsrC5PJJJ5JU1MTKSkpMzIU8m5gMpmora0VJ6s1a9ZgNBqpqqri9ddfJyUlhcrKSoqLiyktLcVgMNDb28uHP/xhduzYQW9vryh7raioeL+7M21QqVTEx8eLMTMwMCD+v23bNrq6uhgaGiIQCDBv3jxuvvlm/vSnP7FgwQKOHz+OVqslIyMDi8XCfffdd1koX4ZCIcbHx2lra0MulzM0NER8fDwJCQnExsbS2tpKb28vN954I+Pj4yIDPi8vj5aWFnp7eykpKWH+/PlT3rb09HQSEhKIj4+nqalJlHlWVFTQ09PD0aNHiYmJYePGjURHR3Pq1Cnq6upYuHAhvb291NTUMGfOHAoKCqbUMOvv78dsNgu9j8LCQrKzs/nd735HQkICubm5Yl/xeDy8+uqrbNy4keTkZFJSUsQzXbdu3TvSmrlY9Pb2cuLECa666iocDgcrVqygublZCJEBXHPNNaSkpHDq1CkOHjxIWVkZVquV06dPYzQaycnJmTZ67UuiI964cSMf/ehH+fCHPwz8i2dfcglJGaYSJJddOBwWL19S5JuYcSpt7HK5XNSmSsQVcGFDYnBwELfb/a4UnM4Vy5C0B9xuNw6HQ2xk0ql9YsnMVGkTSJzdUr+HhoaIi4tDoVCcx0svuT4vh0SocDiMy+USPOaSSzMcDjM4OEhUVJSI0Z3LYQ6Xh/7CO4U0vkdGRkhOThbP4ELc5edyuAeDQSwWC0qlcpIk65WOgYEBDAYDWq0WuVxOIBAQz0YaMxONRomgJxgMkpCQ8H41+5IxcX2Qy+VCq0Qmk+Hz+RgZGSEpKUnMi4m/L+mATKcHRLrXREj8+uPj46jVagwGw3mHurGxMaKioqbNsLdYLMhkMqHNAP/SQzh3jkyswAkGgwwNDYnD2HTOJ5/PJ7QQ4uLiJhkoVquV5OTkC2oTTPezk/CujQGHw8Hjjz9OYmIit99++6TynerqaqqrqxkbG+Mzn/kMAF/96ldxu91UVFSwZcsWwuEwGzZs4MYbb+Taa6+lrKwMr9fL5s2b+elPf0p2dvYkcRKLxcKOHTt44403iIyM5Mknn3zHnb/Yrl/IgyF9PlX3nDixJxocU3Xf9xoX8vhIkCap9Pm/ew+XQ38vBVJ/L5Uw6q08aR8ETBwzl4rL6RnN9PXh/VgzLwZv54V+O2PgQs90uvB2XvD3+73CFPAM6HQ6YmJiSEtLOy9+PjY2Rnd3N8PDw8JqLSkp4dixYzQ3N2M2m6mtrSUqKoqMjAyMRiNOp5Pa2lohgXv11VdTUFAgvjM6OpqNGzfS19f3rpPPLnUhngq83fdcyIq9nBayiXi7dp+b9Hi59vGd4t0sPB+0ZyVhJifKTiVm+vrwfqyZ7/Reb3X/iZ+/lxVMb9fG9/u9wrswBiRXp8fjEaUuGo1GhAb6+/uxWq3AWffdsWPHWLduHQaDgfz8fMLhMG+++SYej4e4uDgMBgNKpRKn00lNTQ0ZGRns3btXxJolF45SqSQhIYGoqKgpYYsKBALCUJFcb1LZiUQKIREAuVwuoV0gVRu8E9eN5EKXqIUvxM0vk8ku6CJ3u90Eg0FRczwTNweJHtXv9wsrVyaToVar0Wq1gi5VoVBc0KXp8/nweDzo9forUp43GAzi9XrFeAqHw0RGRqJWq0VOiUqletu+S5TFl0McfKowMUPd5XJNGl9yuVyMr4mQ3NqBQGASJ/1MhiRhrFQqBbEP/Ksc7tww67mQkvymemxILm2n0ylCnAaDAb/fj8/nE78XCoXQ6/WoVKpJ66O0V1xId+XdQiKAC4fDk+iEPR6PCLlcKLwq9enfzbephLT+Sxo0Ez+T1vWJvzs6Ojrp/wBRUVFTHta4pGoCiVN5cHBQ0ITGxsbi8Xiw2+2MjIzgcDgIhUKcPHlSZI9GRkbyz3/+k6VLlzI2NkZGRgaBQICDBw+yZs0awcBmtVrx+/2YTCbWrFmD3W6np6eH4eHhSdmnEjmE3W7HYrG844xqm82G2WwWCWtFRUWo1WrGx8dFEqHBYCAvLw+z2Ux3d7fIBu3q6iI1NVVkpV4sPB4PFouF/v5+AoEAycnJxMfHExUVRSgUEiWcEu+8lEsAZ/MkPB4Pfr8fv98vGLxm2gInJUg6HA7BPKjVasnNzRVCTw6HA4PBQEJCgli0wuEwZrMZh8MhtMYlLoWZ1sd3A6fTKTKYpcW+pKQEvV6PxWJBLpfjcDgEAda5BtPIyIigeJ4qFreZjsHBQSHMpFQqzxtfer2evLy8SRugy+XC4XDg8/nEYWOmjyNJm8BkMhEMBsnMzCQ+Pl5w60tVTEaj8YIHkeHhYaxWKzKZjKKioiltWygUYmhoiPr6eiIjI/H7/ZSXlzM0NMTQ0JDYnMbGxli0aJHIbQiFQvT29iKXy/F4PGg0GqGr8G4hcbR0d3eL8j2DwUBhYSEDAwN4vV6RdyFVM0ljwOVyMTIyglwux+l0kpSUJMbXdEE6KJ08eZKKigrUajVOp5OxsTEGBgZYunTppPtLe6mUQyYZemvWrJny3JBL4hnw+/00NTWxd+9efD4fp0+f5pFHHsHv99Pb28vx48fFqXXfvn3cfffdlJWV0dnZyYMPPojJZKK1tZWysjL0ej1ut5uVK1fywgsv0NPTg9/vJxQKkZ2dzcqVKzl16hSdnZ1UVlZOMgba2tro6+tjaGiI06dPs2HDhnc0yRsbGzl69ChWq5UDBw7w3//932RmZlJXV8fOnTvRarUMDQ3xve99D4vFIvirH3vsMZ588kkWLVrEunXrLqnUw2w2s2vXLs6cOUNLSwvLli1j48aNLF26VNCKJiUlsWDBgkkWrs/nY/v27aIOdvv27fz85z+fkSdDp9PJq6++it1uJyIigr6+PuLi4vjIRz7C6dOnWbhwIXv37iUpKYm1a9eKMJDP5+PQoUPYbDYyMjJ4+umnefLJJ4mKiprxi/ilYGRkhBMnTrB37170ej1arZbo6GhkMhk7d+5k1apVvPrqq9x6660UFRUJhUo4uzjs37+fhoYGDAbDFW8MSIv9jh070Ov14nlMHF/d3d1kZGRw//33k5qaCiAEx5qamvB4PFx33XXvc08uDpLeQmNjIy0tLWzatInNmzdjt9vZvn07O3bs4Ac/+MEktUD4V+Lh7t27aW1tJSkpacqNAUlv5OmnnyYnJ0ccZiSdltjYWMLhMFVVVfzP//wPiYmJwlP8zDPPsHr1aurq6tBoNGzcuHHKMvctFgsvvvii0Hlxu9385je/4aWXXiIxMVEY13Fxcdx4443Cm9Td3c2rr77KunXreO2119i0aROlpaXTxqEjjeWGhga+9rWv8fTTTxMdHU1TUxPHjx/n2LFj/OlPf5rEdRAKhURVhFwux2KxYLfbWbFixZS376KNgaysLA4ePCjcbuFwmHvvvRe5XM7//d//Tcq2l8lk3HLLLWIBnzt3LkePHgXgv//7v8V3Xn/99chkMl544YUL3vMzn/nMBZOs5s6dy09/+lPg4hNaLoTc3FySk5NJTU3l5ZdfpqurC41Gw5IlS7jhhhsIh8PccsstBINB4uLiSE9Px2QysWjRIlauXInH48Htdl/SPfV6PWVlZXzsYx9jdHSUr3zlK5w5c4bc3FxefPFFCgsLBYfARBw8eBC9Xk9JSQlarZa2tjYOHTrE2rVrRYLlTIFer+emm24Sqmk7d+7EbDaTl5fHX/7yF+6//35RerRz505hDBw/fpxAIEBBQQGlpaWUlZVx7Ngxli9fPm1kIO8X0tLSeOKJJybVNb/xxhtUVlbyuc99DovFwvj4ODabbZIx0NPTg9vtRiaTXRZ18+8WXq+Xp59+mvz8fCoqKoiLi8PlcnHzzTezZMkSwuEwr7/+ujilSmhtbaW6uhq/38999933/nXgEhEXF8e6dev41Kc+hdVq5d5772XZsmUsW7aM6OhoBgYG3vLa7u5uvF4vcrl82k63BQUFPPjgg9xwww3iM4PBwIYNGygoKGBgYIA333yT/Px8sS4FAgF2797Nxz/+cQwGA8PDw/T19U2ZMSBpemi1Wurq6vjmN7+J3+/nzTff5D//8z9ZtmwZHR0dPPbYY2LPgbNelKNHj/L4449jsVhwu92MjY1NqzHg8XgYHBwU3s6UlBTi4+MpLCzk2LFj510jl8t57LHHhCZFe3s77e3t0yLvftGBGymeIi1CkkQlIErjFAqF6KT0+9K/3+qP9N1v9fmF4kvSZ28VV79YxMXFodfr2bVrF3v27GH16tXMmzcPnU5HS0sLv/jFL7jhhhvEg3e73TQ3N/O///u/vPnmm8ydO/eSKT+jo6NFDfDw8DD5+flkZmYyMjLCn/70J1paWnjyySc5derUJFW/9vZ2EROV6q+lcM1Mg8QwFhERwZtvvoler6e8vJyBgQGh1y2568xms7iuu7tbxM/lcjlJSUkMDw9fshjUTIdUQvqLX/yCW2+9lZ/97Ge0trYKrvIbb7yRY8eOXZDUqr6+nvj4eHECvpIhLZ5/+MMfaGho4Nlnn2XHjh0EAgFRtbRr1y7i4uJYsmTJpHXgr3/9K6dOnWJwcJDvfe97tLW1XRYMhGlpaRQUFAiX/KJFi4Qx+O/WudraWlJTU4WexVRDUk984YUX+MhHPsIjjzxCf38/6enp5Ofn4/V6eemll7j++utJSkoS7VUoFFx99dU8/PDD/P73v8flck0pP0ZOTg5Op5Ndu3axd+9err/+epRKJQ6HA6vVKmTRz+X0T0pKoqysjBtuuIEjR46QnZ09rTwDg4ODnD59mvXr10/y6vy7pNGFCxei0Wg4deoUAwMDwrsx1d7SizYGpJu/X3/eri3vFHK5HJ1OR2ZmJnPmzOHFF1+kv78fpVJJVFQUFRUVHDt2jM7OTpxOJyqVipSUFK677jrWr1/P7t27L2jNvR0kLoZAIMChQ4dYvHgxhYWFWCwWMWkMBgPV1dWTZFl9Pt+k2nOVSjWtsa13AynR0+Fw0Nvbi0KhICEhAZ/PJzw5kkE58XQrxcMkb9C5CVRXChISEliyZAl33XUXn//854VssdfrRafTcffdd9PZ2cnRo0fp7e0Fzp6uKisrkclkYpGz2WxCw/1KhNfrZXh4GJlMxpo1a0hOTqanp4eDBw+K8dXT04NGozmPS6C7u5vo6GjWrFnDvHnz+NWvfnWeZPZMhHSg8ng87Nu3j82bN/9bFk6v1yviyhKrqUSiNpVjQ6lUUlZWxic/+Uk++clPYrfbhdS6y+WiubkZo9F4XggjGAwSDAa56aab0Gg0VFdXT5kMr5RMqVKpyMrKIi0tTUjL33777bS1tbF9+3a6uromCQBJ4QuVSsWWLVvo7u7m2LFjdHd3T0m7zsX4+Dgmk4mhoSFMJhMejweTyfRv6ewjIs5S4Le2tuLz+YiJiZkUPp5KfDDqdS4AKWsbzjJrLV68mIaGBgYHBwkGg8TExFBcXIzH48Fmswn3W1RUFEVFRcybN09o0V8KJErMuro6jEYjBQUFxMXFEQgEiIqKIi8vj9zcXEZHR8VGAGdd71LyYDAYxOfzzXhtgsOHDxMVFUV8fLyIjTscDkFUpVKpMBqN4vd1Op0Q65GqVeLj42es0fNOoVarSUhIYO7cuaxevRq/3y8WVK1Wy9VXX83cuXNFWS6cHa9ms1mQFZlMJkZHRydlGl9pkOaowWAgJyeH3NxcQqEQra2thEIhDh06RGxsLLGxseeF1bxeL9HR0YLF8fTp05eFh0nibmlqaiIxMZGSkpJ/6xKWxobP5xO695JBMJUIBALExsayZMkSli1bRlRUFF6vF5/Ph9lsprKyknnz5k3Kcg8Gg6Idq1atYvHixeh0Ourq6qakTeH/X6tBqVSSlpZGRkYGLpeL0dFR1qxZQ2FhoSCSW7NmjVgvJUI0tVrNNddcw7x58+jv73/bMMy7gdvtxuVy4fF46Orqwu12CzXKf9e/YDDIiRMnUCgUZGZmTtuaP3N3kmmGNIH6+/uRy+Wkp6cTExMjKgy8Xi8KhULwfEsbsCTUIZPJiI+Pv+TYjdfrpa+vj9dff538/HyheaBSqYiKisLtdhMXF4dOpyMYDIrs4oyMjElaBk6nU2h1zzSEQiGcTidbt26lqKiI9PR01Gq14OKWsnhVKhUZGRk4HA4h2OH3+wWH9/j4OJmZmTMuJ+LdwuVyYTabcTqd2Gw2kQUvGUixsbFs3LgRtVo9SRMjNjaWUCjE2NgYVquV8fHxKRHKmqmQPHfR0dHCKJDEnRwOB6+99hplZWWkpKQAZzernp4egsGgMBBCoRBarZaYmJgZbThLcDgctLS0sGfPHsrKyhgeHsbhcOD1esUfSRPA4/EwPj4u4tzBYJDR0dFpGxsT15/x8XER75ay+RsbGykvLxcVBDabjYGBAcbHx1EoFERHR1NRUUFpaSkej2fK2tXf3y/YJqWqEplMRk5ODqtXr2bu3LlERUWxadMmwYA6MjKC2+0W8+2aa65Bp9NNq8EosTP29/eL/AS32y2qq6SSamndn1i1V1NTg06nIzs7e9rad+VnIL0FFAoFR44c4dixY6xdu5b29nbuv/9+enp62LVrFz6fj7S0NHJyciguLqahoYGuri7a2tp46aWX6O7u5pZbbqGsrOyS7tve3s6vf/1rTp8+zcGDB/H7/Vx33XWsWrWK5ORkDh06RG1tLfPnzyc+Pp4DBw5QXV3NZz7zGQ4ePIhMJiMzM5NQKER+fv6MdKF7PB5OnTqF3+8nJiZGVDwYjUbi4+M5ffo0HR0d5OTkMGfOHI4cOUJlZSUPPPAAjY2N1NTUCBGRvLy8K84z0NraysmTJ8nJyWFoaIhNmzZRVlZGb28vFouFqqoqjh49yoYNGwiHw+zatYuuri4+//nPCz2Drq4ugCsusXIi1Go1KSkppKWlceLECbq7u0lMTOTqq68WJ/2YmBjhFbBarXz605/mmWeeYcOGDQwPD/P3v/+dqKgo7rnnnikX7pkO7Nu3j3/84x+0tLQIHpbHHnuM0tJSurq6aG1t5fDhw2RlZTE6OkpTUxMmk4lHHnmE/Px8hoaG6OzsRCaTTfnY6OzspLu7W/A7FBYWkp+fz/Hjx6mrq2P58uWTyvZef/11qqqq+O53v4vdbqempob+/n50Oh233377lLXr9OnTmM1mDAaDMAZKS0vp6+ujsrKSYDDI0qVLSU9Px263861vfYubb76Z9PR0RkdHOXXqFMePH2fVqlXTJg+clJREQkICBQUF7Ny5k2AwSFRUFEqlkuHhYfbv309/fz+NjY0sWLCAffv2sXPnTr7zne/whz/8geLiYlJSUqZ1vb8kOuIrDRJXtN1un/SgnU4nTqdTaBNIREMTefPPTZK8WEgeBunaYDAoiDikpCGj0YhGoxEnGYk0Q1JZDIVCxMbGzkivAPyL6CUUCk1yGUour+HhYSHbK/EoSH2USKBcLheJiYlXLOmQx+MR3pCJOhR+v19wZ0hG0LmaBRPzKt5tEu1Mx8QxI81HScvhQuPL7/ejVCqFu93j8aBWq4mMjLwsxpIUBpTWlYlkSVLOECBybd7LsSHpH9jtdqETIZEPSVorE0l0Jq4BwWAQs9mMTqebRPD2biHdR+JW0Gq1qNVq5HI5Y2NjaDQakXck3W+irkUgEMBsNk/Sg5muMSK9O4kcaWKyvEQmBZw3vqX2Tvf4/UAbA9JECgaDkxaViYNbGkTTrU0gIRAIiIlyoftKC8JMLit7O/58KWfi3/UxFApdcR4BCdK4CwQCoo8TN7RAICDe78Tn81bjcOL1Vyr8fv+kxXMiJj67iZ9J42ii4T7TMR3L8VT2++3WxnPvc+7nEzfhqX4X0mYqvWtAkA29XbsuNN+mE+/m/U532z7QxsAsZjGLWcxiFrP4AOcMTIR0UpMsXok7XnKBaTQafD7fJC50yf30TpKSJGsUmMSjIDFUTeRRmPj7kntJshAjIiLQaDQz7sQTCoVEmaD0vKQSIKVSOUl7YeLzk/ooneYmahpcDslf7xR+v188i4ljYKIrVbLZJ5bHTXz/M20MTAcknoCJY0F6dm8VMps4ty+XcIrk7gfO81hO7O+F+iLNren2HE48UUvhTikB9u3Go7TuTVf7JP0GKTQgaSZIIYBz23JuubNU2jmdkOa4UqkkGAwSCAQmrXlvpdsykfBvOp7fB94YkCaYNCg0Gg2jo6P09fWhVqvx+/3k5eUxMjKCxWIR7mspGe5S9cOljdJisQjBIymGJpUxRkREYDAYJglZ2Gw2hoeHhesrFAqh0+nIycmZcbkDgUCA/v5+XC6XWCiUSqWovpDIP3Q6ndBfgLPZymazGbfbLWKgWq2WjIyMyyL561IghacmijJJY2B8fByZTEZMTIwQUJGuaW1tFf9XKpXk5ORcUIDlSoPb7RYVPpIgmpRDo1KpJunYSwgEApOMaEl0bCZDqhKw2WyC+VTqr6QBExFxlrRLOoxIBo/b7cbpdArhOClxdyr7LG1IHo8Hl8uF0WgUfPujo6NERkZiNBrfcvMdGRlBJpORlJQ0ZW2S4PP5RKVDRkYGbrdbrNmSuu5EI8rlctHT0wMgnrWkCTNdkIyo3t5e0tPTcTqdWCwWvF6vMF7i4uKIjY2dVKnm8/kIBALigHUpejgXiw+0MSApQh09epShoSGuv/56IiIiOHDgAL/73e/IzMwkEAjw2GOPYTabOXbsGLW1tTz66KN8+ctfZunSpZesTWCxWDh27Bh79uyhp6eHiooKNmzYQE5ODi+99BLz5s3jpZdeYuXKlSxbtkwwze3bt489e/bgdruJiIjA4XCwcOFCPvvZz04bCcU7hc1m4ze/+Q2jo6NEREQwMDBAYmIiH/3oR6mvr6esrIw9e/aQnp7ONddcI8pljhw5woEDBxgaGkKlUmG1Wlm0aBH333+/KB+7EiAt7O3t7ezYsYMNGzaQm5vL4OAgBw8epKSkhOeee4677rqLuXPnCiEuj8fDN7/5TSIjI9FoNCQlJfHoo49OG+PcTEE4HOavf/0rWq2W4uJi8vLyaG9v5/Dhw+Tn59Pe3k58fDx33XXXpGva29tpaGjAZrNx0003vY89uHi0t7dz8uRJjh07Rm9vL1dffTU333yzyHovKCjgueee42Mf+xglJSXExMQQDodxOp383//9HwsWLKCjowOPx8PnP//5KTd+/H4/w8PD/PWvf2XJkiVUVFRw8uRJjh8/zsjICIcPH+bHP/4xc+fOnbSZhcNh6uvreeqpp0hISOCb3/zmlLYrHA5z/PhxDh48iNvt5lvf+hbPPvssAwMDdHZ2Yrfb+cY3vsG8efPENc3Nzfz85z9Hr9fj8/m49tprWbJkybQZAxJ3SnV1NY899hi/+93v6OjoYM+ePdjtdmQyGfX19Xz84x9n/fr14vmFw2GOHDlCf38/cXFxLFu2bFra94E2BoaGhoQgyMMPP4xSqcTv91NUVMSDDz7ItddeC5wtcero6CAtLY3h4WEqKipYuXKlUNa7FKjVavLy8tiwYQMmk4lnn32Wjo4OoqKiaG1t5YEHHiAiIoIzZ85w7NgxNm/eDJylKf3Wt76FTqeju7ub7du3c//998/IE7OkTSBRxu7evZvR0VHy8vJ48cUXuffee4mMjKSmpoadO3fy4IMPApCSksJnPvMZjEYj4+PjPPPMM/zHf/zHJGKiKwE+n4+Ojg5+/etf88Mf/lCMO4mz/aMf/Sh+v5+TJ0+iVConiZLcddddLFmyhOTkZBEmuJLh8Xh49tlnSUtLY8GCBSQkJGC1Wtm7dy9ZWVksW7YMq9V6Xt16W1sb1dXVeL1etmzZctkwWUZHR7Ns2TJuueUWTCYTP/3pTxkaGsJqtTI8PMy9995LIBBg//79qNVqFi5cKATkRkdHKSwsRC6XC2KbqT4oVFZWsn37dh599FHhAZBos+Pi4njttddob28nJydn0mYWCAQwmUwiBDbVGBoaEl5VKSl3xYoVJCYmMjQ0RFVVFXV1dcydO1eMg/j4eK6++mpR5jiRYn86IBkDg4ODIrxSUlIyiYL6F7/4BVdddZWgRQ6FQtTW1lJdXc3KlSuZN2/etLXxA20MVFVVceDAAeLj43nmmWdYt24dcXFxDA8Ps2/fPqqqqoiMjOQ//uM/kMlkQp3xhRdeoKqqittvv52cnJxLuqdOpyM9PZ3+/n5effVV8vPzycrKwmq1olKpUCgUJCUl4fF4JjGIlZaWotfrcTgc+P1+UlNTZ6yan1qtZt68eej1eo4fP47RaCQtLW1SH+Pj45HJZIyMjIjrCgoK0Gg0+P1+nE4nqampREdHz7gwyLtFR0cHR44cIRAI8OyzzzJ37lyio6MF+ZRCoSAlJYWxsbFJDGWhUIjTp09z5swZdDodGRkZfPzjH38fezK9kGKrf/vb37jtttsYGRmhoKCAgoICli9fzg9+8ANOnDjB3LlzWbhw4aRrt23bhtVqJSYmhj//+c9cffXVpKWlzfixJLn/u7u7ee2119iwYQNKpVLQoUtjw2KxiPwRhUIhOCt++ctfkpKSQklJyZSHjwYHB+no6KCtrY3XXnuN5ORkVq1aRVxcHKOjo1RXV1NdXc0DDzxwnvLe8ePHKSwsfMdy8/8OEo1wRkYGHR0dAGRnZ9PV1UV1dTW9vb1s2bJl0nrpdDppbGzkF7/4BaOjo9x5550UFRVNm2fAbDbT0dFBRUWFCKGkpKSQlJSESqXiwIEDgm9GGqeS4mN8fDxHjx5lYGCARYsWTYs2yZWblXUR6O/vp7e3lzlz5qDRaNixYwcmk4nk5GQWLFhAdnY29fX1dHd3C+10yT2bmZlJe3v7JMrgi4FCoRDWekxMjGiDy+USA0RKmJvIaxAdHY1CoaCrq4uenh7KyspmbLmURNvs8Xjo6OhAqVSSkpJyXh+lvAAJUVFRqFQqRkZGBPHSxASqKwUSMUxhYSHx8fHs3r2b5uZmPB6P6Kt04p9Y7KNQKFiwYIGQpm1sbKSvr++978B7hEAggNVqxWw2k52djd/vp7W1lbq6OhQKBcnJyQQCAdrb2+no6Jg0lhobGwUxl1wu59VXX51S1rvpglqtFkmhMTExNDc3MzIyMombRKvVijwB+JdQnNFoRKfTYbFYhGbAVGJwcFCwHaalpVFZWUlnZyd+v1/wPxgMBurq6oQRGwwGGR8fp7u7W2gUuN3uKWtbOBymo6MDu90u8kMkhlZJ1E1aa6qrqyfNp5iYGMrLy8nMzMTj8dDQ0HDJ9PIXC7fbzcjICP39/UREROD3+xkfHxfePafTSVNTEzk5OZOMkXA4zMmTJ8nOziYxMRGTycTOnTunpY0faGPA5XIRDodZtmwZq1evZvfu3QwNDVFYWMiHP/xhPvaxj6FWqxkaGsLhcKBUKklKSmLDhg2sXbuWY8eOTRITuhhI2a7x8fFs2LCBuro6amtrAYRWglTBICUASRgbG6OzsxOLxXLJzIfvB9rb2/H5fERGRhIVFSUS5OBsH1Uq1XlWuN1up7e3l87OTubPn3/FGQJwto8Oh4Py8nKuvfZaqqqqGBgYEImscPb56PX6SVTMERERbN68mY997GMsX76ccDh8RRsDPp+PsbExDAYDS5cuJS8vD7vdzqFDh2htbeWOO+5gw4YN9Pf3c/To0UlUsjabjbi4OJYvX86SJUt4+eWXLwtjQKqXT0pK4tprr+WNN95gaGhIJJvC2bFhMBgmSQT39fVRUlLCddddR0xMDI2NjSI5bqowOjoqJMavueYaLBYLbW1tmM1mVCoV+fn5LF26lG3btglNDcmgczqd9PT0MDo6KpKhpwotLS34fD4cDgdDQ0OCktnn85GYmMicOXPIysripZdeEgZjMBgkMTGRW265hbvvvpulS5cyPDzM0NDQlLVrIhwOBzabjfHxcRHCkaimXS4XHR0dREREEBsbO2nOh8NhzGYzZWVlrFy5EoPBwPbt26eljR9oY0ClUhEZGYnBYCAjIwOFQoHD4ZiUzZ6amkpcXBxqtXoSSdE7qSSAsxbi0NAQUVFRZGZmkpycTFJSElFRUZjNZkKhEKOjoxiNRpKSkkTpSTgcZt++ffh8PkpKSmZ0OZn0jH7961+zYMEC8vLyhLKc2WwmEAhgs9lQq9VkZmZO6uOpU6fo6elhwYIFM7qP7wZKpVIYSBqNhoyMDOLj44mIiMBqtRIKhbBYLKSmphITEyPKtiSWtXA4jE6nIyUl5YrLp5gIuVyORqMhOjoamUxGbm4usbGx9PX1sXfvXlasWMG1117L4sWLSUpKwuVyiaogrVYrMtsl1b/LYSxJSpQxMTFkZWWRmJhIUlISCoWC0dFRweSXkZGBwWAgGAzicrk4cuQIc+bMYd68eWzYsIEVK1ZMueiOtF5K+hDz5s0Tm5rT6SQ+Pp6lS5dOWiclPRetVktXVxcWi4XR0dEp3XSl8Ong4CD9/f1YLBaGh4cZHh4WIZS5c+cKY1E6lTscDhQKBaFQiISEBBISEqYtGVsqmZbL5bS0tOByuRgcHBRek2effZbNmzeL0I405wGxRyUmJhIXFzdt4/gDnTMgaWo/9dRTGI1Gbr/9dtxuNzt37hScAnPmzKGkpITa2lqam5upra3lj3/8I52dndx9992XfELv7e3lL3/5CyUlJQSDQZYsWUJxcTF6vR6j0cjBgwc5c+YMy5cvJy4ujjfeeIMzZ87wiU98ghdffFEsfjMZbrebyspK3G43sbGxYoLFxcURHx8vJHuzs7NZsGABe/bs4cSJE9x7773s2LEDtVrNli1b3udeTB+k6pNnn30Wm81GRkYGpaWluN1uzpw5w4EDB6isrOTmm2/G5/MJrvrCwkJxupXJZJSVlYmQwZUItVpNRkYG6enpHDhwgO7ubhISEvjkJz9Jf38/f/rTn4QIVkZGBn6/n9tuu40//elP3HDDDQwPD/P0008THR3NJz7xifM8bTMRJ06c4MyZM2RnZxMMBtmyZQvl5eU0NDSgVCrF2PjQhz6EzWbjxRdfZGBggA996EM8+eSTjI+Pi7Llq6++ekrbtmjRIux2O1u3biU/P5/W1lY+/elPs2/fPl555RVWrFhBR0cHX/jCF0hJSeH555/n1KlT/PjHP6agoIAdO3YILpepNGJXrlzJ2NgY+/fvp6enh0AgQGJiIt/73vdYsGABkZGRuFwuvvWtb+F0Ovmv//ovVq5cSVZWFocOHaK4uJiBgQFuuukm0tLSpqxdEyHlBpSVlbFjxw48Hg/R0dEMDw/T1dWF3++fVG65detWdu7cyfe+9z0eeOABtm3bhl6vR6PRcM8990xLGz/QDIQejwen08n4+DgajQa9Xi/kLh0OhyjhkuSDnU4nPp8PvV5PMBgUMalL8Q74fD5sNhujo6MkJCSgVCoFUYeUMBYZGUlkZKTQI/B6vURFRTEyMoJer8dgMMzoU45Uh2y324mNjRXZvdKJV4rnSYNb0oiQOAhkMhmxsbEzuo/vBlItucViISIiAr1eT2RkJOFwWKjNSQp9Uj29z+cT+RQajUbElmdaWelUQxozdrtd9Fer1RIIBHA6nfj9ftRqNTqdDpVKhclkIikpSWiO+Hw+1Go1er1ezO+ZDGk9kk7aEq+CdJp1u91ERkYSHR0tOEsCgQAGg4HR0VHcbjdKpVKsEzB1PAOSNsHY2JhYk2JiYnA4HEI10Gg0ivwBp9MpZMjhbHjMbrcjl8uJjo6eUuNM0jSRVADj4+NF/b5KpRK8LQqFArPZLPIyJG+bwWAQa+50ahOEQiHsdjtjY2MiWVRaDxISEsS9pfBBfHy8+H25XC7G+nQkOX6gjQH4FwmQTCYT5UdSIopUajLV2gQSQYhWq53kvgyHw7hcLiFSNJX3fS/x77QJJOnQqX62lxMmskqeK0p17tiYmCgmhbDejnXvSoTL5RLzUQqVSAlpEmvcudoEkuiPxOh2OYwpqV+Sa33i+iAZ2RNZJ8+dOx6PRzB9Tlf7pDEqbUhSm/1+/yTj9FxtAollT8JUkyFJf0vPRapGkVhML/S7EiGVWq1+T8aH1K4L3evcdXLiZ1I+mTSWpwMfeGNgFrOYxSxmMYsPOma2z2wWs5jFLGYxi1lMOy7a3zDrQJjFLGYxi1nM4vLDxYRALtoY+PrXv/6uGjOLWcxiFrOYxSzeezzxxBP/9ncuOmegq6vr3bZnFrOYxSxmMYtZvMeQxODeDrMJhLOYxSxmMYtZfMDxgSYduhCkciVJNzocDiOTyQgGg6I0JhwOC36Bd1q3LJWWSaVS57ZBKh06N9YTDAYJh8PTVl4yHQgGgwCinz6fT5Rxntu/iSVjEi3n5VAS9k4glRlJRCxSyZw0Lt7q+UiEWJdLudxUYeI4kvrt9/svOIfgbO15KBQSz+lyelbSODj3Hb/V5xPxXqwRE9shUaxLVL9Smbb0TqTzps/nE2vmVL+LUChEKBQiHA5PKquUWPze7nlJc/Ct1typgjTf/X6/4JaZeP9gMPiW6ppSieR08iBcPjvKewSJVGN8fFxQEqvVatxut2B/i4iIICEhgbi4ODQazSXVe0svPhAIYDabxXdIP5OENjQajRgw0mSSfhYIBIiMjBS1szNxkZs4wKUa2cjISEFfGh0dLbj3J9Yh+3w+nE6nINzQaDRvWZd7JUAia9Hr9SgUCvx+Pw6HA7VajVarncTFIHE0jI2NoVQqiY6OvuINJgl+v19wLEg14RLvfVRU1HkkLH6/H5vNhsfjEYQyM1XYayKkTU1aH1JSUsT6IhnKg4ODpKSkTNr0pDVCIrAJhUKTlAOnElL9vtlsJjExEafTydjYmJBz1+l0JCUlTZLXdrvdmEwmQag2VXX90rxwOp04nU7C4TBGoxG1Wo3P58NisQBnRdC0Wu15Y2DimqvVaqdN6loynpxOJxaLheTkZPF8pPtLa55KpZpkSPn9fkwmEyqVSpBuTQfHyGyY4BwcOnSIQ4cOUVtbi16vFyIRkqRsbW0tjz76KD/72c9YunQp69evZ/78+Rf9/TabjcbGRvbs2UNVVRVf//rXxfV+v5+nn36a+Ph4Fi1aRGZmJgqFQgz25557Tij7HTlyhB/+8IczdoELh8M0Nzdz4MABMjMzmTt3LlFRUXzxi18kOjqa6upqNm3axEMPPSSMmqGhIbZu3Yrb7aasrIyXXnqJn/70p5eNFv2lwuv1cscdd/DhD3+YVatWYbVa2bVrF0uXLuXVV1/ljjvuoKioSLDNDQ4O8stf/pKlS5cyOjrKwMAA/+///T/gyjcGfv/736PVaikuLiY3N5fW1lZ27txJdXU1n/jEJ86j3n3hhRdobW1lYGCApqYmfvKTnzBnzpxpI+OZKvT391NfX8/Ro0c5ffo0zzzzjNjUXS4XZ86c4fOf/zx///vfycjIENeFw2EcDgcvv/wyKpWK0tLSS1qXLgVWq5Xf/e53mEwmPv/5z1NTU8OBAwewWq0EAgEWLFjALbfcIqh9fT4fn/vc5zAYDDQ1NTF//ny+8pWvTInEcjgcZmhoiF//+tcMDw8TERFBKBTi17/+NU888QQmk4n+/n4CgQDf/va3mTdv3nkyxs888wyJiYmsWLGChISEafGoBINB9u/fz5NPPoler6e5uZnf/OY3KJVKGhsb6e7uZt68eVRVVbF582by8vKAs8bdL3/5S8xmM/X19aSlpfGpT32K0tLSKW/jrGfgHMTFxXHzzTfz4IMPEg6H+c1vfsMdd9wheOOHhoZYsGCBUI2TrOGLhcFgoLy8nPT0dOrq6sTnZrOZ119/nezsbJYtW4bBYJhk/bW2tjIyMkJeXh5paWk0Njbi8XhmJB1tMBjEbrfz5JNP8sgjj5CRkYFcLicQCPDQQw+RlZXFU089hcFgwGq1kpKSAsBrr72GVqtlwYIFZGRksGvXLk6fPk1ZWdm0aYy/X7Db7VRWVpKZmSmY5gYHB6mqquKhhx5ieHgYu93O+Pg40dHReL1e/vKXv1BRUUFFRQVtbW0MDQ1RVVXFwoUL3+/uTBukficlJVFeXi4W67lz55KcnMw3v/nNC5Y9l5eXs3TpUgKBAPv376e+vp6ioqIZbwwkJSURHR1NdnY2VVVV4nOJ9W94ePgtT4X//d//zV133UVBQcG0zReHwyEEkCQj3WAwsHz5clauXCnc9BLVsOS6f+ihh0hPT+dvf/sbfr8fs9k8ZToATqeTT33qU6hUKpqbm/nJT34CwPr160lPT2d0dJSTJ0+ydetWysrKxPPr7u5m37595ObmsmLFCnQ63bTRVbvdbvLz8/nqV79KRkYGX/va12hra6Ourg63283jjz9OZGQkv/3tb1mzZg05OTkidLh69WoyMjKorq6mp6eH5ubmaTEGZkmHzkF6ejpZWVkYDAY8Ho9QLdTpdAQCAQYGBti6dSsNDQ3k5uZOss4vBhEREedJ94bDYaxWK6+88gpDQ0Ps3LmT9vZ24V6X2jU+Ps62bdt4/fXXhUDLTITL5WLPnj14vV727NnD4cOH6evrQ6lUkpmZyZkzZwgEAkRHR09yZWq1WiwWCyaTiVAoRG9vL2NjYyJWfKVAcgtK/O6SdycmJob4+Hi++c1v0tHRQWpqKrGxscDZcaPT6ejs7BQ6Gf39/VOuWT+TEA6H8Xq9vPTSS/T19XHgwAGqq6vxeDxCQe+tPCLp6emEQiFaW1vp7Oxk4cKFM94QACbxz0+EJGgzd+7c8zasQCBAR0cHXV1dHD58mL1793LmzBmxEU8lbDYb/f395OXlTcoB6u7u5qWXXuJHP/oRTU1NuFwuAJHbkpGRQX19PU6nk+joaGJiYqasTUlJSSiVStrb22ltbRUCdKWlpaSmpqJWq4Xq5cQ4fX9/P1u3bmVwcJDt27fT398vZKKnGmq1moSEBPLz84mJiSEcDpOQkCBUSXt7ewmFQnR2djI+Pi7WvIiICPLy8ujv76elpQWv18vcuXOnpY2zxsA5MBgM6PV6obxXWlqKTqcTiSWSrGpsbCyDg4OYzeZL+v4LLV5erxer1crAwABpaWkMDQ3R0NBAd3e3+B1JbEUyHLq6uhgfH5+RZFAej4eTJ0+SnZ2NRqOhoaGBEydOCGlZKdHIbrdP0jUvLCwEoKOjg5qaGkZHR8/zkFwJMJvNdHd3o1arhRfF7XajUCiIiYnB7/cLT9BETvKysjKsVit1dXW0tbXhdDqFnOyViEAgwNjYGH19fSQlJWGz2WhqaqKpqenfXivlYASDQWQyGV1dXZeFUXmh9cHtdjMyMsLAwIAQLXI4HGLj8vv9tLW1CdnmoaEhTp8+PWluTQVGRkYYHh4WuRtutxu3201MTAxpaWloNBpCoRBvvvkmVqtV9Ecmk6HVakV8X5LvnQpInglAaH243W5sNpvYaB0OB3DWWyQ9X7fbjdlsZnh4mPT0dHp7e6mtrZ1SaeWJkLwlarWavr4+MjIySElJYc6cOaSnp1NZWUlzc/OkREapf1FRUeJzt9tNb2/vtLRx1hi4AHw+HyMjI1RWVrJw4UKR6KFSqUhNTeWGG25g48aN7Nu3jxMnTrzr+7lcLuEOXrduHZmZmcKFJGFwcJDMzEzWr1/PvHnzOH78+Ixd4AKBAD09PZSXl3P99dfjcrk4fPgwTqcTmUxGeXk5RqORgYEBTp8+La4rLy8nKysLh8PBiRMnUKlU5OTkzFgPyDvF4OAgDQ0NqFQqYQSazWahzPfQQw8RDAY5duyYMAgVCgVLly4lPj6e5uZmOjs70ev1F1U/fLlCSgAzGAysWrWKgoICRkdHOXr06FteI204koJeSUkJ8+fP55lnnrnkkN5Mwfj4OKOjo4yOjtLV1YXH42FwcFCcvoPBID09PWRmZnL11VeTnJxMd3c3LS0tU9qOnp4eBgcHkclk9PX1YbVasVgsZGRkcN1113H33Xfz0EMPcfjwYZG4JyXOSZLbSUlJWCyWKVk3pe+XlCsLCwvJy8ujqqqKgYEBkXjncDiIjY2ltLT0PFXAuLg41q1bR1paGtXV1bS1tU1Juy4EyfCvra1lxYoVJCUlsWjRIioqKujq6uLUqVPk5OQQExMjcsWk55eZmUl5eTkKhYKXXnppWto3mzNwDsLhMO3t7VRWVrJ8+fILZp+Gw2GSkpJEduqlfv+5f8vlcrRaLTExMchkMubOnUt3dzfj4+PC1XfgwAGys7MpKSkR1nV3dzdz5syZus5PESIiItBqtcTGxhIZGSlOdV1dXZSVlWE0GikvL6e1tRWPxyOeqUql4tZbb8XpdNLV1SXkTy+nMsqLgVQp0tzczMjICDqdjvb2diG1WlRUxJe+9CWef/55rFar8KSo1Wo+97nPCUO1s7NTyMNeiZDJZGg0GmJiYpDL5RQWFjI8PExHRwcwmSJd+rdUwTI2NoZGoxE5Gc8999yM9KKdi4nrgvRvr9cr1gHJBd/f309BQYGQudZoNMTFxaFUKklNTSUnJ+eSvZb/DtLJf2hoiO7ubsxmM4ODg8TGxqJSqVAqlcTGxgrXfCgUwuv1MjIyQmpqKkajUcTspcqsqcDAwACJiYkYjUbS09MpKSnB4/EwNjbGqVOnMBqN3HzzzcJLFAqFkMvl6HQ6EaZbsGABLS0tOJ3OKWvXRITDYcbGxmhrayMYDLJs2TJR7rh8+XIWLVrE9u3b2bJlC2lpaaKqJBgMYrFYSEhIYO7cudhsNmpqaqaljVfWKjsFcDgcnDx5ku3bt/Pss88KQ2BoaIjm5mbq6ur4wx/+QFdXF1u2bKGsrOySvl/Ss3799ddpbW2ltraWhIQEMjIySE5OZteuXdTU1DB37lzi4+N54403qK6uZsuWLbz00ksMDg4SExOD2Wzmwx/+sCgtm0mIjo7mgQce4C9/+Qtr164lGAySl5dHOBzmscceY+PGjSLuWFpayu7du6msrOShhx6ir6+P5uZm7HY7X/7yl684QwCguLiY7Oxs2tvbeeWVV5DL5WRmZhIKhaiurubIkSMcPXqUjRs3EhERwT/+8Q+6urp49NFHOXjwIO3t7eTk5PAf//Ef73dXphUajYaMjAzS09M5cOAA3d3dxMfHc+edd+JyuXj99ddpbGykrq6O/Px8IiMjeeCBB/jDH/7Ar371KyIjI8nJyWFoaIhvf/vbREZGvt9d+rcIBAL09/ezY8cO2tvbOXPmDOXl5aLaZPfu3cI139XVxdGjRxkaGuIjH/kIn/vc58jMzMRqteLz+di0adOUtq2kpIScnBx6e3vp7OzE7/cTGxvL0aNHGRgYYM6cObS1tfH4448TGxvL888/z9GjR/nkJz/JY489xvr168XGdtNNN01Zu44cOYLVasVgMKDVaiksLKSkpIQtW7bgcrmQyWR8//vfR6vV8vvf/56vfOUr3HTTTWRkZBAXF8fOnTs5ffo0q1evpqSkZMraNREmk4mtW7fyi1/8gtTUVH7+859TVlbGDTfcQE5ODpWVlQSDQW677Ta0Wi2vvfYau3fv5oknnuDLX/6y8LBqNBq+8IUvTEsbZ0sLz4F0qhgfHxcu2IiICJHZ7XK5RFzXYDCg0WguKTFJcmFarVasVitxcXFERUURERHB8PAwHo8HtVotSgilZLO4uDhGR0eFRa3RaEhISJiRZCpS5vPAwAAKhQKVSoVGo0Gj0dDb2ytiZ3q9Ho1Gg9vtxul0EhcXJ2KhSqUSo9E4I/s3FZCe0dDQECqVipiYGCIiIhgbGyMQCKBSqYiOjiYiIgKfz4fX6yUuLg6z2SySCd8uge5KQTAYZGBgAK/Xi1KpRK/XYzAYUCgUWCwWxsbGiIqKIjo6GoVCQU9PD1lZWQwODuLxeFAoFERGRmIwGN4zzfp3A4lrw2aziUqbyMhIUY1js9kYGhoiLS0NhUIh4uRxcXF0d3cLkiW9Xk9cXNyUz59gMCjCN263m6SkJDweDw6Hg3A4jMFgEB7O8fFxnE4n8fHxdHd3o9FoRHKk1Kd3C+nEbbFYUCgUaLVaFAoFRqNRuPwncrXk5uYyMDBAdHQ0SqUSi8WCx+MRHijp+qmGz+djbGyMkZERNBoNgUAAjUaDXq9HqVTi9/uRyWTi2Y2NjWG320lJSaGrq0vkW+n1enQ63bSETmeNgXMw8XFcKDww8bN3MskmugGlQSpNWKlW+FyymYnw+XyEQiFRujNTIcW6/H4/SqUSpVIpyEpCoRAqlWoSmYr0t8S+eCV6BCZi4niaOK6kENDEpNWJz0difZuuEqiZCofDIVg/Jz6ric9n4nwMhUL4/X5CodCMLL99K/y79eFCY2bitVIi6kQyr+lunzRvfT7fJO/LxLVLmvdKpXJa5rbb7RbrhvT9UlhAaovEJitB4iRwOp2T1tzpwMSwz8QxK4V/zmXRnPjspIODWq2e1oqYWWNgFrOYxSxmMYsPOK7s49dF4FxL99yTmPSZxPctQUosfKfegYmW/bnfcW55yUQrciIkS3Kmuz4vdHL7dx6YiVb8TO/fpWJiHyVIfZ34jt+OK/1CJ50rHeeeW859Vuc+i3N//3IZR2+1Pvy7zy/U36kME7zduD3XczGxfRKkde1CP5uqtk1sk3RP6X5vp00wca2fLkxcx899btLP326+S5jVJphGhEIhUZcqbfxerxe73U5SUhJwNmPVYrEgk8kIBAKkp6djNBrfkdtG4grQaDQX5JkeHR0V8fSJ6O3tJRAIiAGUkZExIxMIz4Xb7SYUCk1yIUpuvYnhAkC47ex2O6mpqe9Hc6cdUp24NJ6k6pSIiAhGRkaE6zA6OlrkpZwLSStDIiX6IGCiK9jj8TA0NCSeX2RkJMnJyZN+XwpTBQIBUYt+OcDv9zM+Po5Wq50U4pBK06Q4s4RwOIzdbsdkMom5JM2tqZ5D4+PjDA8Po1QqCQQCpKamijVMit9LOR3nwm63o1QqRbhnKuHz+XC5XIRCIeLi4ibdU8rBebsxIGlcTPd66vf7GR4eJi0tTWzqwWAQj8eD3W4nMTHxgrkUUvgQmLZE2A90mKC1tZXKykqOHz9OcXExH/3oR/F6vRw5coSdO3eiVqtxOBx8/etfp6enhwMHDtDY2MiDDz7IU089RUVFBatWrbqkioKBgQHefPNNTp48SVtbG2vXrmXDhg0sWLBAZJN/5zvf4aGHHhJ86+FwGI/Hw5e+9CVsNpsYtF/84heJj4+fkafDcDhMW1sbR48eJS0tjZKSElJTUwmHw/z5z39Gq9VSVFQ0iSLWZDLxxhtv4Ha7KS4uZtu2bXz729++4rQJOjs7OXHiBHv27EGr1aLVarnrrrvweDw888wz6HQ6fD4fGzduZOHChaSnp0+6fuvWrTQ2NhIZGcmnP/3p96kX7y3+8pe/oFarKSgoID09nRMnTvDyyy8LQaeFCxdy9913i9/ftWsXHo8HuVyO1WolMjKS66677oKG1UzCmTNnOH78OHV1dbS3t7N582Y2bdrE8PAwJ0+epKysjDfeeIM777yT7OxsIiMjcblc7Nixg+3bt6NWq/F6vcjlcubMmcPDDz88ZXPH6/Wya9cufv/735OZmYnf7+eTn/wkeXl5KJVK+vr6uOWWW9i5cycJCQliU/P7/fzyl79kwYIFNDY2otPpuPrqq6fEUAmHw5hMJv7whz9gMplEX3/0ox/xxz/+EYPBIHIp0tPTWbt27aT10u/3U1tby9e+9jW++93vMm/evHfdprfCyZMn+dvf/oZOp+P48eP88Ic/RKVS0dLSQm9vLyUlJdTV1XHjjTeK5PVgMMju3bt58803iYmJoaKigmuuuWZa2veB9gykpKQwf/58xsfHRb271+slLy+P+++/H5lMxte+9jX8fj+RkZHExMSg0WgoKioiLy8Pr9crrLWLhVQH/MADDzA8PMzrr79OQ0MD5eXlwmp0OBwEAoHzrl2wYAGxsbGCt1rKNp9pkE73L7zwAtdffz0ZGRkYDAa8Xi87duzAYDBQXFw8SZENYO/evYTDYYqKisjKygKgubmZ/Pz8GZ8weSmQFOXuuece4uLikMvlpKWl0dfXx9y5c1mzZg3h8Fm60nOV5yTNAq/XO+M3tqmAz+fjjTfeQK/XU1RURGpqqqjB3rJlC0ajUVReTMSpU6dITU1l2bJl+Hw+tm/ffp6Y0UyEXq+npKSE5cuXMzQ0xHPPPcfChQvp7++nrq6OW2+9lby8PKxWK4mJiUKNMSYmhk996lMoFApqamowm83TsmkkJyezYcMG1qxZQygUIisrC7VazejoKLW1tajV6vOSPIPBIAcPHmTTpk3C6zE8PDxlXgun08kNN9wAnNUbeO655wgGgxw+fJi77rqL4uJi+vv7efbZZ1mzZo24TqrcGB4exul0TiuBWzAYJDk5mU2bNpGSkkJnZycul4vKykr6+/v50Ic+RFxcHH/6059Yvnw5mZmZQpugvLyckZERRkdHhSTzdOADbQzo9XoSExNJTEykp6cHQMhYBoNB2tvbycrKmuTacjgcNDc3i9JDo9F4yffMz88nIyODmJgY3nzzTeCs1d3d3U1ycvIFXWjSwDWZTOJ7pkOsYirg9XqFqEZfXx8qlUoQo2zdupU1a9YwODiIUqlErVaLMhm73S4Gu1arxWazMTw8fMWx7ElVAZJrNysrS+jBezwe+vr6cLlcxMbGnucy7OnpEaWnM9EQnEpI1SfnjhmJaMfhcGA2m0lISDjPWIyPj2dwcJB9+/aRkJBASUnJZVGhEhcXh8FgEIag9P6lNWnHjh14vV6io6PFvFEoFOTk5JCZmYnT6cRqtaLX68nNzZ3Stknj1ul0CpKs7OxsXC4XNpsNmUyGTqc7b8xGREQQGRnJgQMHkMlkxMfHT6k2gcFgIDY2FrPZTCgUIjMzk4iICCGoJNG4Nzc3T4q9O51OBgYGSElJeU/UX41GI4WFhVgsFuLi4tBqtYI6WaFQYDAY6OjowG63T8orSExMFCWc04mZPzumERdK1oiOjsbhcNDb20tVVRWZmZnCupW40qurqzGZTMLFeynQ6XRkZGQQDofp6ekRhsH4+Dj19fVs2LBB1BRLZXkS7HY7PT09gpFsyZIlM5JIxeVysW/fPmJjY2loaGBgYEAQDB09epRly5ZRVVWFxWJBLpcLL4CkzNXR0UFMTAz9/f1X5IYnvdPGxkbq6+tJTk7m7rvvRiaT4XQ6OXjwIK2treh0OhYuXEhiYqIgqxocHBT1yZLxNPEkdiVB8jAdPXqUJUuWcPr0aUZGRpgzZw4ajYbTp0/T3NyMXq9n2bJlZGVliQW0tLSU119/nf3795OZmcnjjz9+WRgDsbGxhMNnKXa7urqoqKjAaDQSCAQwGo28/PLLZGVlsX79+knGgGQwd3V1EQqFSE1NnZYyNJ/Px9DQED09PYyNjZGTk0M4HMZms5GUlEQwGMTtdmMwGCYlyRUXF7Nr1y6io6NZvnz5JR+i3goREREkJCQwMjJCV1cX3d3dZGRk4Pf7iY6Oxmw209raSk9PzyRDIBAIYLVaaW5uFt4Cn88nSnenGpIAlVqtpqGhQRhMiYmJWK1WTp8+jUKhYHR0FJ/Pd8Gk6+nGRQebJdfcdChhzSSEw2clOJOSkrjpppvYtm0bTU1Ngjc+Ly+PT3ziE2zZsoUXXniB7du3X/L3w9nT8969e1mxYgVz585laGgIs9lMe3u7EPCR+L3hLMnQI488wo9//GMefvhhQqEQp0+fvmA44f2G1+uloaGB1atX87GPfQyr1cpf//pXOjs7iY6OZvPmzRQVFdHT08OOHTvEdWvWrCE1NZXW1laef/55ETK40tzhqampbNiwgS984Qv88Y9/5OTJk7S3t1NQUMAXvvAFvv3tb3PDDTdw5swZQZwSCAQ4cOAAarVa6BlYLJZJY+RKg8fjob+/n+joaG677TZKSkoYGBhg//79LFu2jMcff5ynnnoKvV7P0aNHJynO9fb2UlFRwWc+8xliY2P5xje+IQRrZjLC4TChUAiHw8GuXbv48Ic/THp6Oh6Ph+joaL7+9a/T1dXF1q1bJwmZSQeWPXv24Pf7Wbx48ZS3TaVSsXz5cr773e/yv//7vygUCurr6zl+/DgNDQ24XC5cLtckWl/Jm+BwOPj85z9PSkoKJ0+e5I033piSNkmVABqNhnnz5lFSUsK2bdvo7OzkwQcfpK2tjVdeeYXOzk7mzJkjNlcpVDEyMkJ7e7sQT5ouFVBp3dfpdKxdu1YIOsXHx3PVVVexZ88e3njjDdLS0gQh0nuNizaBWltb8fl8yOVyoqOjp0yLeqZhZGREMFhFRUWxYMECgPM23bS0NKFDf6lwuVz8/ve/58EHH8RoNGKz2QTDWk1NDTabjYGBAUwmk8iQtlgsGI1GoZooUWnOxBOhpFIWHx9PVFQUqampOBwOIR4j6dFbLBb6+vrEdWq1mnvuuUdoE/z1r38lKSnpsjjRXQp8Pp9gPQPIz89HqVTi8/lE7Ds1NZVgMCiyySMiItDr9fT19dHd3U1PT49grZQqXq40SONIqtopKytjdHSUpqYmHA6HeDYpKSmCuVNCU1MT8+fP59prr2XlypXceeed55XmzlT09fWxY8cO/vM//5OoqCghVW00Gpk/fz4/+MEPePbZZ4UyoITnn3+ejIwM4WmbaoyPjyOTyURSXkZGhmASHB0dFRLF9fX1FBYWEh0djdfrpaOjA71eT3FxMVlZWVRWVk4SKHu36O3tJSkpicjISLKzs5k3bx5ut5sVK1awZs0aKisrOXz4MJ/97GeFt8Lr9QrWv5qaGux2O729vYIVdqphtVoJh8MiPLBu3Tq6u7vR6/VUVFRw1VVX8cYbb3D//fdP2/v7d7joVVav1/O5z32OW265hTvuuGM62/Sewel00tvby/HjxxkaGqK3t5f+/n6Gh4cJhUIkJSUJcaC2tjY6Ojpobm7m73//Ox0dHdx8883Mnz//ku7Z1tbGn//8Z44cOcLx48cJhUKsXLmSTZs2ceONN/Lmm2/i8/nQaDS4XC727t1LY2Oj4K6Hs4ZJcXEx+fn5M1Le12AwcPfdd/Pqq68yOjpKMBikuLiY0tJSUlJShBpfZGQka9eu5dChQ9TU1LBlyxaGhoZob29nbGyMRx555Ip0gbe0tFBTU0N2djYjIyNs2rSJrKws6uvrqa+vJzs7m66uLtavX08gEOCNN96gr6+Pe+65B7PZzLZt2+jq6gI4L3HuSoJarSYlJYWUlBSOHz9Ob28vOp2ONWvW8Oqrr1JUVITVaiUtLY2MjAysVitf+tKX+OEPf0hGRgZOp5P9+/djs9m45557Losk1DfffJPt27dTV1fHoUOH8Pv93HfffQQCAUwmEydPnuTEiRNce+21REREsG3bNkZGRrjlllt4/vnn+cY3vkF2dva0zJmOjg4GBgbEOlRYWMj8+fOJjIxkdHSUM2fO4PV60Wq1+Hw+Xn31Verq6vjsZz8rwquSdPHmzZunrF2nTp1ifHxcyJ1LIUmz2UxtbS1Op5Nly5aJMfH973+ftWvXsnz5cnJzczlw4ABerxe9Xj9tY8Tn81FTU8Pp06dZvnw5nZ2drF27lpSUFHp6eqiursblcnHttdcSHR3Nrl27OHToEP/1X/+F0+mkqqqKrq4ubDYbCxcuPK+Mdipw0aWFUkM/+tGPcu+996LRaISLZiKxw8TNaSJJhfS5VCcvJWyce71UNxwMBt+SHtJms+F0OomIiCAxMfEdJ3/4fD5GR0dpbW3F7XazYMECnE4nY2NjuN1uYmNjCQaD5ObmYrVa6e3txWQykZubi9PpJDU1ldjY2EsaQJIevcViEbW6mZmZFBYWotVq6ezs5PTp0xQWFpKUlITX68VsNmM0GhkfHyciIgK1Wo1Go5mxiXVSPK6+vl5Y2Xq9noyMDE6cOIHBYBAxvdjYWNxuNyaTieLiYmw2m3DVFRQUvCeJPe81hoeHGRwcJCIiAqVSSXR0NDqdDrvdTl9fn4i35uTk4PP5sFqt2O125s2bh8fjobOzUySSLly4EIPBcMU9Iwl+v5/jx4+LMSPpEEibiqRXEB0djUajYd++faxbt47e3l58Pp9YT/R6Penp6TPSeJ6Izs5OOjs7GR8fR6FQ4Pf7mT9/PhEREZjNZgwGAy6Xi6ysLME74HQ6KSgoYOfOnaxcuZLY2NhpGQ8mkwmLxSIEczQaDenp6ajVajweD8PDwxw+fJgFCxaQlpYm3PBLly6lsrKSqKgoAoEAWq1WaC68W4TDZ1VmLRYLKpVKeIsKCwsxm82MjY2Jyqu4uDj8fj/Hjh0jOzubjIwMAoEAXV1dnDx5koULF5KWljYteVhSGKKnp4ekpCQCgQDZ2dkoFAqcTiejo6NERESQm5uLXC6ns7OTvr4+UQ3T2NiI3W4nOjqagoKCaeHNuCSegY0bN/LRj36UD3/4w8C/tKSrqqpQq9VkZGRMklSVNLh9Ph9FRUXA2TpaiRhCcofs2bOHlJQUIXMZDAbZv38/FRUVonRGut/o6CgtLS1YrVaCwSAxMTGsXLnyXTEBTnogERGT3LgSx/dEg+XdsFVJeRfSJid970QGOmkBk+4nwW63I5PJpp2jeioglWl6vV5hvEifj46OotPpUCqVgqxE+pnf7xeEKVcqpH6Oj49jNBrFWAgEAng8HkKh0KQNfuIYvdB0nW7mtJkAq9WKVqtFpVKJ+SERxUhaDeeytEmuYKka6HJ4RlJO1kTmU2l8SJu/JLt7rnbJe8Gi5/V6cbvd4l1MHKPS2jUxEx7+tYbZbDbUarV4h1MJu90u1g1p7XA6naLUcSLO1Qg4d82dLt6WQCAgkhSl+S3pZ0hj+GLn/HS08V0HY30+H0899RQpKSnceeedk4yBjo4OqqqqsFqtfOELXyAiIoKXXnqJsbExFixYwMc+9jE8Hg/f/OY3ue2224SLxOl08tOf/pQnnniCgoIC9Hq9+M6uri4qKysZGxvDarXS3d3NypUr31Hb32riTCx3k3Chwf1OINWOSjj3pDKRQexcREVFveP7vteIiIgQp4dzPz+XNW8iRel0qHHNNEiL1sS5AgiFvQv9/oX+/UHChcbMuc/v3GdzoXk803HuIj9xI5NymSbivR4bb/VMJ3qF38r7Mp0hrQudlCfuGxNx7jN7uzV3KjFRREnCWx3q3o85/46NAcla0ev1pKWlkZeXR25u7iQrZmxsjO7ubgYHB3E4HBgMBhYvXsyuXbtobm5maGiIo0ePkpKSQmFhIYmJiTgcDo4fP86NN97Itm3buOmmm5g7d654IPn5+cyfP59wOMypU6f42c9+9q4ewNvxl1+M0+SdeiQuFud+//tRcvJucW6b345n+61OvlcS3ur9n3vSkz57u2sm/s6Vjkt9Bu8Fn/t04GLXpLebO9Pd33PvdbE6ENPdxgutj5eyxr9X4+Rc78TFtGG6n927MgYcDgfj4+N4vd5JP/P7/Zw+fZrBwUEiIyNJTEzkj3/8Iw8//DAA69atw+128/Of/5ycnBySkpKEtTk+Ps6hQ4eYP38+r7zyCnPnzqW4uFi4fgwGAyaTiaqqKmw2Gz/60Y/eaReAf+UNxMbGXtBKs1gsxMTEMDQ0hNVqFdoEaWlpxMTEvGNtgtHRUXFyjoiIwO12MzAwIKR+JS7/czPFnU4ngUBgSkk7phsTtQnC4TCDg4MYDIYLaodLteUOh4OUlJT3qcXTC7/fL8hhJPdkQkICBoNB8AlIYZSJsNvtmM3mSR4tlUpFSkrKZbXZvVNIpCsT3cxSyOlC5ad+vx+Px4Pf75+2OPp0wO/3i1LmC8kvT6wskiBR7krhzfdCttlms4mkPa/Xy+joqMjheit4vV7C4fB5miRThUAgwPj4+KT3LYUrJ4acJUjPTSaTTVubzkU4HMZisYgSQonICXhbMjFJe+FCxE5TgYs2Bvr7+wU5gpSIUV9fz+23347NZqOlpYUDBw4IV+/evXtZvXo1ixYtoqenh+9973ts3ryZmpoa8vLy0Gq1DA4Ocs8997Bz505aW1vx+/0Eg0GSkpJYtWoVlZWV1NfXExkZyfr164Gz/M6//e1vGR0dJTIyksrKSm666SauuuqqS44z19XVUV1djdlspqGhgU9/+tPk5+ej1+ux2Wz885//ZGRkhHvvvReTycSJEyfo7Ozk9ttv52c/+xnz5s1j0aJF5OfnX/Q9pe+pqamhr6+PJUuWMH/+fGQyGb/4xS/IzMwEzi78c+fO5b777hPaBDt37kSj0SCXy2lqauLTn/70jI0XS6RK1dXVJCQkkJOTQ0REBL///e+pqKigtbWV1NRUFi1aJFyfVquVQ4cO4Xa7yczM5IUXXrgiKwpMJhPV1dUcOXIEjUaDWq3mxhtvRKPRUFlZSWFhIUePHmXt2rVkZmYSGRlJIBDg+PHjHDhwALlcTjAYJBQKUVBQwEc+8pEr6vlcCP/85z9RKBRkZWWRnp7OwMAAtbW1JCUlMTQ0hNFoFGsEQH19PaOjozidTsxmM4mJiaxevXrGhw2am5uprq6mpaWFvr4+Nm7cyMqVK0lMTMTj8dDW1sZPf/pTvvOd74iDgt/vp6enh+eeew63241Go6GwsJB77rlnytsnJQfv2bOH/Px85syZQ1VVlcjo7+rq4nOf+xx5eXnnGSQSp0haWhpFRUVTvqHV1NRw5swZXC4XDz30EIDQbdizZw8//OEPJxmNAwMDHDx4kH379vHpT3/6gm2eavh8PvEOv/KVryCXy2lsbKS2tpbh4WGWLl3KypUrzzsEOhwOnnrqKfx+P5/97GffX2NAo9HwsY99jLS0NBISEggEAoIV69prr0WpVJKcnEw4HEatVrNo0SIKCgpITk4mKiqKW2+9FY1GQ0VFBcnJyahUKpFRecstt5CVlSVoRtPS0oiPj2fTpk243W4SEhJEO6Kjo1m8ePGkGuy4uLh3lFAhcSYYjUY6Ojro7u4mJSUFhUIhauAtFotgpQoGg1itVlJSUggEAgwODjI2NnZJ95SSFufMmUNUVBQNDQ1oNBrKy8spLCyksLCQjo4OUacvYXh4mLa2NvLz84mNjWVwcBC/3z8jE+1CoRBer5c9e/aQlZUl+tHT00NXVxcbN25Eo9EwPDxMQ0MDK1asAOD06dNYLBZiY2OJioqir6+Pvr4+0tLSZmQ/3ym8Xi+BQICCggJiYmIEt35XVxcnTpxgyZIlhEIhQVsqeVSCwSDz5s1DoVDQ19fH8PAwWVlZV7QhEAgEOH36NE6nk4yMDKKiovB6vdTU1OBwOCgqKqK5ufk8qtYzZ85gMBjIzs5GqVSyfft2li5dOuONgWAwiFarpbS0lKioKPbv309RURHx8fF4vV76+/tpbGycRLAkMQAWFxcLMrIzZ87woQ99aMoN6Z6eHk6fPk1CQgLx8fEoFArkcjmxsbGkpaUxMjJCVVUVCQkJYn0OBoNUVVVht9tJSUkhJiZmWhIIh4eH6e/vnzQWBgYGaGtro6+v77x7ajQaEhISMJvN4tQ9nZAShwcGBmhsbMTtdguvVlFREQaDgZqaGubOnXueMdDV1UV7e7vwJE8HLtoYMBqNPPzww8KFHQ6HqaioQCaTceutt07ShJbJZMyZM0dcm5KSwmc+8xkArr32WvF5cXExMpmMe++9V1w7EdImMfHzvLw88vPzxWeSRvY7eUDJyclERkaiUqno6ekRpy2Hw4HJZEKv14vNXqfTCZdYREQERqPxPCnRi4FWqyU/P5/i4mKGh4f5wQ9+wNjYGElJSdx1112kp6ezdetWkpKSyMnJEddJJY9SeUlcXNy0Cmu8GwQCAXp6ejhy5AhlZWVERUUJESaPx0NaWprwxjQ2Nor33NzcjFqtJjk5maSkJEKhEN3d3cTHx19RxgCcHQdSWVZMTAxGo5Hm5mbMZjOjo6OCUGpihnN6ejrFxcUEg0Fxerzqqqve555MHyRtgldffVWUUKrVagKBAKOjo7jdbiHYdO6JrqmpiQULFjB37lzGx8d54oknplXkZapgNBopKysjKyuL4eFhHn30UVwuFx6PB5vNhlwuP29Tk5J1N2/ejFwuZ2xsTFRtTSU8Hg8tLS3s3buXhx9+WJCuZWVlkZKSQnJysvBSSBuyZMS+9tprzJs3T0hyTzWLrbS2aLVa8Z5dLhdmsxmv10tUVNR5p2mj0ciiRYtITU19TwxqKZQil8vFPmIwGMjLyyMyMpKWlhb6+/vPqyRwuVxCkVEieZoOXLR5JpU9yGQyFAqFKAuTPpPL5cJKlD77d3/OvX7iz6Qsz4mDX/pM+vm5/79UGI1GdDodR48e5fjx48yfP5/o6GgsFgsDAwOiHFJ6OR6Ph+7ubv785z9TWVlJXl7eJbNFRUVFUVxcDJwdwLm5ueTn52M0GgUpxvDwMFFRUZOsw4KCApxOJ3/729947rnnSElJmbGnHIfDwWuvvYZOp+Pll1/mtddeo729nbi4OBobGxkfH6ejo4P+/v5J+SYpKSmYTCba2tqw2+20tra+Jxb7+4HR0VFeeOEFHnvsMZ5++mk6OjpISEggMzOTRx55hKqqKtLT04VXTKFQUFZWhkKhYGhoCK/XS3JyMmq1+or2DHg8Hl566SU6OzvZunUr+/fvJxgMsmbNGp555hm+8Y1v4PV6KS8vn7SIOhwOvF6vWCNmIm33hZCSkkJ2djahUIiBgQEWLFhAdHQ0/f39tLS0sGTJEmByWbRSqaS0tFSwWEZGRor1YSrHRl9fH11dXfT39/Piiy/y0ksvYbVaSUpKErwHIyMjLFy4cFLlk9/v5+WXX6ajo4Pt27eza9euS/aovhUkuuOuri4iIiKE7ks4HKalpUWIPgHnHZ7ey3kTDocZHh6mrq6OpUuXirJyo9GIwWCgoaGB3/3ud1x99dUkJSVN4uhpbGwkNTVVeM6naz2cnoLKywiRkZEsWrSIjRs38sQTT/DHP/6RtrY21Go1HR0dmEwmTCYTLpcLnU5HSUkJX/ziF3nooYd46qmnePHFF9/RfaUTz9VXX826deuAsyfqJ598kjVr1pxHKGQymSgqKuKee+5h6dKl/PznP6exsXFGegc8Hg+nT5/m2muv5bOf/SwjIyO8+OKLpKamctttt/HDH/6Q48ePo9FoKCgoENddd911pKamUl1dzZNPPkkoFGLu3LnvSTLUe4nMzExuvvlmvv/977Njxw4OHjxIfX29SBr71a9+RUtLCy+++CL19fXnXb99+3ZGRkYmxcivRLhcLrq6ujAajXzkIx9h3rx5dHV18dxzz9Ha2sr/+3//j7vuuotdu3bx85//fNJc8Pl84v8REREzVu77QpCSs1988UU+9alPER0dzcDAAAMDAzQ3N+N0Ounu7sZut5937csvv0xCQgKf+tSnprxdnZ2dOBwOrrrqKr70pS9x8uRJjhw5wuDgIG63m76+PoLBIKtWrRJ5QF6vl87OToxGI/fccw8VFRWYTCb+8pe/TFm7du7cSTAYxOVy0d3djclkYnBwkAMHDtDf3y+Sdevq6qbsnpcKi8VCf38/g4ODNDU1CfbbsbExNBoNubm5fOYzn+HLX/7yJK+O3+/nzTffxGKxiINiU1PTtLTxyiJ9vwT4/X7cbrfQmV63bh3bt29HoVAI6s/Ozk5GRkYwmUzn1bGmpKS8IwEdKXv1+eef57777hPymZKE8djYGHFxced99969e8nKyqKwsFAM/I6ODgoKCmYcd79MJkOj0RAXFyc8HFKcXOKW+OMf/0hGRgbLly8X12k0Gm6//XauueYaent7RZb9TOvfu4XP5xPu7YiICLKzswkGgzgcDqKjoyktLeVrX/sab7zxxnlCRK+99hqxsbEiIfNKhjSOpKqd4uJiLBYLR44cobu7m+985zuCF9/tduNwOESVjeR1lE7PsbGx00YmM5UIh8MMDAywd+9ePv3pTxMVFSUogEOhkBAE6u3tJTc3V5zAw+Ewu3btElLG53IwTAVUKpUIlcrlchYtWoTL5RIMmadOneKBBx6Y5JGQEsqlzPmCggKsVis1NTVT1i6dTifyBXp6ehgZGaG7u5vo6GiGh4fp7e3FZrPR2NjIggUL3pd5M9E4bWhowOl00tfXJ+i24+PjiY2NJSEhYVJFmdPpJD4+ns7OToaHh/H5fLS2tjJv3rwpb+OVtcpeAuRyOWfOnKGlpYUFCxbQ19fHDTfcQFlZGTqdjt7eXtra2gSDnt1uZ2BggJ6eHvbu3Ut7ezurVq0SQkYXi/7+frZv386ePXvo7OxELpezYMECsrOzeeGFF1i7di16vR6ZTMbo6CidnZ10dXVRWFgoLFudTidOzTNxo9TpdFx99dUcOXJE5IKkp6cTGRnJ4OAgzc3NlJWVkZubK4RC2trauOaaa7BarfT09GCxWLj77rsvG+a4S0Fvby+tra2kp6czNjbGypUrKSsrw263Mz4+Tnt7Oy0tLcybNw+1Ws3x48cxmUysW7eObdu28aEPfegDYQxIxEwJCQk0NjYyODiIQqFg/fr1WCwWjh8/Tnx8vChfDgQCfP/73+fhhx+mrKwMn8/H3r17kclkbNy4ccaG1Sbi1KlT7N+/n1OnTtHe3g7A2rVrSU9PJzY2lpqaGrEmDQ8P093dzcjICCkpKfzpT38SzyMpKYlly5ZRUVExZeMkLy8Ps9lMVVUVTU1NWK1WFi1axOnTp6mursZut9PV1YVCoeC2225jZGSEtrY2brnlFhISEmhpaRGMtKtWrZqSNsFZuerExER8Ph+dnZ34/X7BTDs4OEhjYyN+vx+5XI7b7eavf/0rFRUVFBUV0d/fT3d3NzU1NaLEfTrYXWNiYigsLMRoNE56hx0dHTQ0NJCRkUEoFGLNmjUkJydTVVVFTU0Nd955J2vXrhXP1eVyTVvOwMzbSd4jSLS+KpVK1OYuXLiQhIQE8bOFCxcSFxdHcnIyTqdTkCpJCYSlpaWkp6df8r2lGJ9arRbKWQqFgtjYWMrLy0Wy3MR8ivz8fKxWKyqVSljYGRkZM/K0o9VqWbZsGQcOHCAYDJKdnY1erxf9VSgUFBUViZwIKa4rJRvJZDKh0HYlbngSPa7b7SYiIoKlS5eSlpaG1WqlsLAQr9eLwWCgrKwMALPZLN5zbm4uWVlZV7RAkQSp2mf9+vUEg0EhXCQ9K7PZjN/vJy8vD6PRiEqlEsbx4sWLsVqtBAIBNBoNy5cvn/EU3oBIKisuLkatVoscgKSkJCIiInA6ndx2223k5uai0+mEkqyUyCcxWE6HpkdiYiL5+fnYbDbcbjeFhYXk5OSICqCUlJRJmjJS7b7BYGD9+vWCeVPSYpkKRESc1afR6/W43W7C4TB5eXkkJCQIhcDFixejUqnIzc0Va430bJRKJUuXLhWVEdMFnU6HVqvFYDDgcDi49dZbyc/Px+/3Y7FYhOrmqlWrSEhIYGxsDKVSiVqtJicnB5lMxurVq3E6ndOmanhJ2gRXGoLBIF6vF7vdTmJi4iS2t4nVERMfkUQS804rGEKh0KQJEwwGxXeFw+HzJvG5maUTpYBnMqRwiFQ+o9VqBaHOucQaUh9DoRA+n09kR1+pkLLkLRYLiYmJkxanYDAoFtdzXd3StTOVW2I6MTw8TGRkpODZkLQvpAxytVp9HkOby+XC5/MJbYzL4ZkFg8FJ60AgEDhvfMjl8kn8/2gGfdcAABKJSURBVBOTCaX1SaqymmqjIBQKiQ0sOTlZJMKFw+FJBv3ENkt/m0wmtFrtBcnGpqJd57L6SToJ0mehUOi8U/VEPQVpXk3nOJn4fKR7+nw+xsbGxEF04pyf+N4nVtBNh+HygTYGZjGLWcxiFrOYxWw1wSxmMYtZzGIWH3h8YHMG4Cy3tlSeI7nsY2JiRCmbxAAnl8sZHh7GZrMhk8kIBoMkJiYK+dRZzGIWs5jFLC5nfKDDBEeOHKGqqkps/v39/dx4440YDAb6+/uJi4vj9OnT3HDDDfT399PQ0MDQ0BBXXXUV1dXVFBQUUFBQQGpq6kXf0+v1YjKZ2LFjBx6PhyVLlpCdnY3L5eL5558XZTt6vZ6SkhJWr14trn3hhRcYGhoiEAigVCq5/fbbSU5Ofk/ENS4FTqeTI0eOcObMGRG3TExMZOHChURERFBfX49araawsFAQO8G/aEv7+/vFdddff/2M699UwO/3Y7VaqaqqIi0tjaysLFwuF2fOnKGxsZGMjAw2bNiA0WicFMP0er1UV1fjcrmIi4ujtLR0WpLFZhqOHTuG3+8nISGB1NRU/H4/e/bsIRwOC9KbiYydcHYctre3s3v3bu6++26SkpJm/FhyOBx0dXVx7Ngx3G4311xzDZmZmQwODnLq1Cn6+voIh8MsXLiQOXPmkJiYSCgUwu12C3n4hIQEiouLL7nS6WIQDAax2WycOHECo9HInDlz8Pl8DA0N0d/fj8vlYv78+SQnJ4u8n2AwyJEjR7DZbLhcLlJSUqioqECr1U5Zu1588UX6+/tFPP6OO+4gGAzS3d3N0NAQMpmM22+/fdI1AwMDHD16lI6ODrKysoQGxHQd8Hp7ezl+/Dg9PT2Ew2Hmz59PaWkpycnJuN1unn32WUpKSpg3b57ICZPopY8ePYpSqSQnJ4cFCxZMouifKnygj7VWq5Xe3l6Sk5MF33l5eTk6nY62tjZWrVrF/v37KS8vx2azMTAwQHV1NRs3buTUqVPY7XYMBsMlGQNut5vOzk7q6+vp6urC5/OJJJZ//OMfpKSk4PP5BH3mRGPg0KFD9Pf3C3Gba6+9dsppPacCHo9HGFoKhQKbzUZGRgYZGRk4HA62bdsm6o4nGgMjIyMcO3aM3t5ekpKSqK6uZtmyZRiNxivKAxMMBhkdHeXw4cOYzWb0ej0pKSmYzWZOnDhBV1cXhw4doqSkBIPBIOqOAaqrq2loaBBVJlc6gsEgvb29VFVVER0dLbLTm5ubOXz4MEajkbq6OkpLS8nKyppUXWOxWKisrOTpp59m/fr1JCQkzPhnZrVaaW9vp6amhq6uLvR6PVFRUfT393Po0CHMZjNwNrNfMn5CoRBms5ljx45hsVhQKBR0dXVRXFw8pYmT4XCYkZER6uvraWlpIS8vj0AgQFtbG/X19TgcDpxOJ6FQiJUrV6LRaAiFQrhcLl588UVyc3Pp7OwkKSlJGCxThcOHD9Pd3Y1Go0GpVHLdddcJnYTa2lrC4fAkY0Dqy759+zCZTBw+fJjo6GgqKiqIi4ubsnZNxPDwMAcPHmRkZAQ4y4CblZWF1+ulq6uLv//971x33XVkZWVNMgZOnDhBVVUVY2NjZGZmIpfL2bBhw5S378pZYd8BysvLyc/Pp6CggK6uLkEDOj4+LpS18vPzaW9vJzo6moSEBKKjo8nOzqa0tFRk+14K3G43Y2NjPPbYY7z66qu0tLSQnJxMRUUFGzZs4MYbb6Surg6FQnFe+U1eXh5XXXUVc+bMEQpuM3Fxkzi0H3/8cWQyGUeOHCEUClFcXExDQwNer3dS9q8EaSOUxKt++9vfUltby+LFi88jfbqc4XK5aGpq4sknn+S5554ThpHVaiU7O5tPfvKTrFmzhr6+PtLT0wWRjt/v5yc/+Qk333wzy5cvJzU1dUaWlk4VpIqBZ555hpiYGBYvXkxWVhZDQ0P87W9/Y+7cuVx77bU88cQTdHZ2snnzZsEl4Pf76e/vp62tTdSYXw6w2Wzo9XoeffRRXn31VY4ePUpFRYUojXvggQeEp00qL5W0QG644QZUKhXPPPMMr732Gvfcc49QQZ0KBINBTp06xfPPP89nP/tZSktL0Wg0nDp1ipqaGm677TZiYmL4xz/+QVlZmRC0M5lM/P3vf+fo0aPs3r2buro6du/ePaXGQG5uLosWLRJCXllZWfT19aHT6VCpVIyOjk76/XA4jEKhID09nc9//vNs2LCBI0eOkJiYOG3GgFKpJCMjg/vvvx+ZTEZCQgJRUVGYzWYOHjxIVFTUBeez1Wrli1/8Ii+99BKVlZVs27ZtWoyBK3cluQhIG77f7+dvf/sb1113HREREYyPjxMTE0NERATJyclCClVaxH/0ox+xe/du5s2bR2lp6SXdMzk5meuvvx6r1cqJEydYvnw5y5YtIzMzk8997nMsW7aMzs5OioqKWLZs2aRrJU7wn/70p2zfvn3GLnBRUVHcc889rFq1Cp1OR0FBARUVFSQmJrJ27VoUCoXQoJiIQCDA8PAwQ0NDeDweIVQ0UaHtSkBjYyP79u0jOjqab3/727z44ov09fWRn5/P9ddfz+uvv86CBQvIz88XC34wGKSuro6WlhYOHTrE888/z1/+8pfLhnP/ncLtdvOTn/xEuFFffvllLBYLPp9PUPN6PB7Gx8exWq3iOonwatGiRefVls9klJWVsXTpUnHS/9CHPkR6ejo+n4+uri5+8pOf8NRTTzEyMiLK5lQqFRUVFWzatIn58+cL4aC0tLQpbVtPTw+NjY00NDSwc+dOfv7znzM0NERGRgYul4uPfvSjfPWrX2Xz5s2kpKQA/yqls1gsmM1mIbjW29s7pW0bGBjglVde4Sc/+Qn//Oc/kcvlrF+/ntTUVKGjMxEREREUFRXx2c9+luzsbMEbcyle3kuFZKBK77C/vx+LxcLo6Cg6nQ6dTodSqZw0TuVyOY899hiFhYWkpqZSUFBAeXn5tLTvA20MSBv/yZMnycvLE7XKwWBQUEcqFApRF6vVaikqKuKxxx7j/vvv5w9/+AOvvPLKJd9TkqeVyWT88Ic/5G9/+xtyuZyYmBjeeOMNcnNziY+PP2+zXLZsGTfffDN5eXn8/ve/Z9euXTNSiU0ul5OYmEg4HObvf/87crmcFStW/NvFeNWqVZSWltLS0sLXv/51PB6PmMxXEsxmM62trTidTtauXcu3vvUt9u3bx/j4OE6nE6fTydGjR3n22Weprq4GzhoDDQ0NjI2NkZ+fj8Ph4Nlnn+XgwYPvc2+mD16vl4GBAex2OwkJCZhMJnbt2sWePXu47777qKur4ze/+Q1NTU3odDpiY2NFzX1tbS2tra3YbDY8Hg/Nzc2XheEk1Z1brVbkcjmf+cxnOH36NImJiaxatYpbbrmF2tpafve739HQ0CCukcIBr7zyCpmZmfznf/7nlB8WJLa+YDDI4sWLeeaZZ9i1axc+n4/ly5dz3333MTg4yI9//GO6urqAs4ZKRkYGn/jEJ3jiiSd47bXXcDqdJCcnT2nblixZws0330xRURG/+93vRLveDhIvwquvvsrmzZtZvHjxtMTiJSQkJLBy5Uo2b95MQ0MDf/zjH/nDH/7A0aNHSU5OxmKxCOrkiW3XarX09fVhtVpJS0vjjjvumJb2faDDBMFgkOHhYXbu3MknP/lJoStvs9kYHR0VOuGlpaWoVCrMZjMKhQK9Xk9GRoYgLboUuFwuRkZGmDdvHh/5yEf4xje+gcvlAs7yV7/wwgs8+uijgs3L4/HgcrmIiIgQktGNjY0cPnwYn883I3MGpOS/Xbt2YTQaSUxMfEsSIamPTqeTqKgo7rzzTlavXi0oQufMmTOliUYzAUqlkqioKCIjI7nqqqtQKBSMjIxgtVqJiYnhhhtuYO/evYTDYZxOJ+Pj4zgcDrHhFRUVYbFYaG1txWw2X1D++0qApE0AMG/ePAKBAC0tLTidTsrLy3niiSdoaGggEAgIdrmenh5hFPT19WE2m/F4PFRXV3P11VfPeDIrq9WKy+ViwYIFKBQKHnjgAdxuN9HR0cyZM4fo6GhOnTqFy+XC5XJhs9nw+/3ExcWxc+dOjEYj2dnZFBQUTCImmgpI+RpJSUmUl5cLldWWlhaUSiUf+9jHKC8v5//+7/+w2+2MjY3h8XhITEzk/2vvfn6a2rYAjn+tHMQWWgIIQhpEipTyOxpjg9FIHDhVUYckxJkT/yMnOjHGONSBGlED1tQfmFZKkEJT2+a0hZb+BHpo3+Bm74fee3NznzSP2P2ZEJoTelpO9ll773XWunPnDul0mgcPHgD80JPkV1QqFdbX1zl9+jQmk4nl5WVmZ2f/cmwUxZh0XaepqYlyucy3b99IJBJMTU1x7Nixqo2nhmHQ2NjI4OAgLS0teL1ecrkchmGQzWZZWFggmUwSDAZldU1Arky/fPmSgYEBTp06VbXJUU0HA5FIhEAgwKFDh+Sylt1uJ5lMsra2hq7rFAoFjh8/TjqdJpVKkUwm8fv9hEIhBgcH/5TB/E82NjaYm5vD4XCQzWYZGxujr6+PYrHIly9fKBaLdHV1YbFYSCaTfP36lXA4zNmzZ1lbW+PIkSPk83l6enro7e09kFsFYq/3yZMnXL58WfYL393dJRKJyDKxorvY6uoqq6urXL16VVaZ0zSNW7duVTW79/+lo6ODvr4+vF4v0WiU7u5uLBaLTJRzOBy0tbUxMDDAzs4OHo+HRCLB0NAQjY2NrK+vk8vlsFqt2O323zIQgD9mblarlZGRETljstlsnDx5kvr6epqbmzl8+DATExOyxfe9e/eYnp5maGiIUChELBaTVUYPYuD8s7W1NUKhEJ2dneRyOVmeVtd1/H4/TqeTuro6RkdHKRQKvHv3jlQqxejoKPfv35c36xMnTjA2NravTxR0dHTIrqKhUAiz2UxnZyebm5tym0YkBZdKJebn5/n+/Tu3b9/GZrORTqdxOp2yTv9+SafTrKysoGkauVxOjo2bm5vEYjHi8TjZbJZwOIymaTx69Ijx8XE0TePhw4fouk42m6Wzs1Nm+FdDIpHA6/XKnK/h4WHa29sxmUysrKzIVcFSqYTP52NpaYmpqSkeP37MixcvcDgcLC8vY7PZmJmZ2ffz+71G2X8pFouRSCQ4d+4c8MeMVjzGs7y8TDQapbm5WT76UalUqK+vJxAIEIlEmJycpK+v71+9Z6FQkDO6jY0NJicnGR8fZ3t7m0AgwMTEBGazGZPJRCaTkXt04+PjzM3NoWkara2tDA0NMTIyUo2v5ZeJYCAUCuFyueSSYLlcJhKJYLFY0DSNra0tdF1naWmJhYUFrly5QjQaJRAIkEqluHv37p/20H4H3d3dnDlzBo/Hw4cPH3C73fT397O5ucnz58/JZDKy0Yyu63g8HqLRKDdu3KC/v59oNIphGNjt9qrtHx4EIhi4efMmPp+PdDqNy+XC7XaTz+fx+XxsbW1x8eJFXC4Xuq7z7Nkzrl27htvtpquri1wuh9PpPLDJtj/bOwHY2Nhgenqa3t5evF4vb968kZ1WL126RDAY5PPnz8RiMRoaGlhcXMQwDCqVitxe289gwG6343Q6+fTpEx8/fqS9vZ2RkRFaW1vx+/14PB7y+TzXr1/n6NGjeDweFhcXmZmZIRwO8/79e1wuF8PDw7S0tOzbee3u7jI/P4/JZKKtrU2OjcFgkHw+L1fiwuEwVquVV69e0dDQQFNTE2/fvqVcLuPz+RgdHZWz9/1mMpmIx+O8fv1adnA9f/48PT097OzsYLPZcDgcdHd3Y7Va8fl8zM7OcuHCBZ4+fUo8HicYDMqmb9UIBmq6zoBIwPl5KU3UyF9fX5ezWpH9vrfe9v9ykxI5Cbquy/a8op743nrUoj61OL6uro5MJkOlUkHTNCwWyy9++ur5q88iXheNiMTv4hjxGdPpNMCB773wq0SN91QqJZuk7OzsUCwWMQyDlpYWeQ2I9rVihUTsJ/9d9vHvKB6PYzabaWhowGQyUSqVyGQysocD/Lfng+h0ubu7K+vRi58HPbCsVCpsbW2RSqXk+CCeWhLbaaKPyt5rQ1wHos6+GKv2uwZFpVLBMAwSiQQdHR3y75dKJQqFAnV1dZjNZnnO5XIZTdNIJBJYrVbq6+urcs1mMhn5XmJsFHlf8GNvAtEcTnxX4voQ31m1gkbDMNje3iaXy/3QC2fv/1Ccg3hN0zTZn0IcK+4B+62mgwFFURRFUWr8aQJFURRFUVQwoCiKoig1TwUDiqIoilLjVDCgKIqiKDVOBQOKoiiKUuNUMKAoiqIoNU4FA4qiKIpS41QwoCiKoig1TgUDiqIoilLj/gN+NdmOaMytUQAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "detect_and_crop_save_table(\"llama2_page8/page_1.png\")\n",
    "show_images(\"llama2_page8/table_images\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "3. 基于 GPT-4 Vision API 做表格问答"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {},
   "outputs": [],
   "source": [
    "import base64\n",
    "from openai import OpenAI\n",
    "\n",
    "client = OpenAI()\n",
    "\n",
    "def encode_image(image_path):\n",
    "  with open(image_path, \"rb\") as image_file:\n",
    "    return base64.b64encode(image_file.read()).decode('utf-8')\n",
    "\n",
    "def image_qa(query, image_path):\n",
    "    base64_image = encode_image(image_path)\n",
    "    response = client.chat.completions.create(\n",
    "        model=\"gpt-4o\",\n",
    "        temperature=0,\n",
    "        seed=42,\n",
    "        messages=[{\n",
    "            \"role\": \"user\",\n",
    "              \"content\": [\n",
    "                  {\"type\": \"text\", \"text\": query},\n",
    "                  {\n",
    "                      \"type\": \"image_url\",\n",
    "                      \"image_url\": {\n",
    "                          \"url\": f\"data:image/jpeg;base64,{base64_image}\",\n",
    "                      },\n",
    "                  },\n",
    "              ],\n",
    "        }],\n",
    "    )\n",
    "\n",
    "    return response.choices[0].message.content"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "在AGI Eval数据集上表现最好的模型是LLaMA 2 70B，得分为54.2。\n"
     ]
    }
   ],
   "source": [
    "response = image_qa(\"哪个模型在AGI Eval数据集上表现最好。得分多少\",\"llama2_page8/table_images/page_1_0.png\")\n",
    "print(response)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "4. 用 GPT-4 Vision 生成表格（图像）描述，并向量化用于检索"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {},
   "outputs": [],
   "source": [
    "import chromadb\n",
    "from chromadb.config import Settings\n",
    "\n",
    "\n",
    "class NewVectorDBConnector:\n",
    "    def __init__(self, collection_name, embedding_fn):\n",
    "        chroma_client = chromadb.Client(Settings(allow_reset=True))\n",
    "\n",
    "        # 为了演示，实际不需要每次 reset()\n",
    "        chroma_client.reset()\n",
    "\n",
    "        # 创建一个 collection\n",
    "        self.collection = chroma_client.get_or_create_collection(\n",
    "            name=collection_name)\n",
    "        self.embedding_fn = embedding_fn\n",
    "\n",
    "    def add_documents(self, documents):\n",
    "        '''向 collection 中添加文档与向量'''\n",
    "        self.collection.add(\n",
    "            embeddings=self.embedding_fn(documents),  # 每个文档的向量\n",
    "            documents=documents,  # 文档的原文\n",
    "            ids=[f\"id{i}\" for i in range(len(documents))]  # 每个文档的 id\n",
    "        )\n",
    "\n",
    "    def add_images(self, image_paths):\n",
    "        '''向 collection 中添加图像'''\n",
    "        documents = [\n",
    "            image_qa(\"请简要描述图片中的信息\",image)\n",
    "            for image in image_paths\n",
    "        ]\n",
    "        self.collection.add(\n",
    "            embeddings=self.embedding_fn(documents),  # 每个文档的向量\n",
    "            documents=documents,  # 文档的原文\n",
    "            ids=[f\"id{i}\" for i in range(len(documents))],  # 每个文档的 id\n",
    "            metadatas=[{\"image\": image} for image in image_paths] # 用 metadata 标记源图像路径\n",
    "        )\n",
    "\n",
    "    def search(self, query, top_n):\n",
    "        '''检索向量数据库'''\n",
    "        results = self.collection.query(\n",
    "            query_embeddings=self.embedding_fn([query]),\n",
    "            n_results=top_n\n",
    "        )\n",
    "        return results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {},
   "outputs": [],
   "source": [
    "images = []\n",
    "dir_path = \"llama2_page8/table_images\"\n",
    "for file in os.listdir(dir_path):\n",
    "    if file.endswith('.png'):\n",
    "        # 打开图像\n",
    "        images.append(os.path.join(dir_path, file))\n",
    "\n",
    "new_db_connector = NewVectorDBConnector(\"table_demo\",get_embeddings)\n",
    "new_db_connector.add_images(images)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "====检索结果====\n",
      "[{'image': 'llama2_page8/table_images\\\\page_1_0.png'}]\n",
      "====回复====\n",
      "从表格中可以看出，在 AGI Eval 数据集上表现最差的模型是 **Falcon 7B**，其得分为 **21.2**。\n"
     ]
    }
   ],
   "source": [
    "query  = \"哪个模型在AGI Eval数据集上表现最差。得分多少\"\n",
    "\n",
    "results = new_db_connector.search(query, 1)\n",
    "metadata = results[\"metadatas\"][0]\n",
    "print(\"====检索结果====\")\n",
    "print(metadata)\n",
    "print(\"====回复====\")\n",
    "response = image_qa(query,metadata[0][\"image\"])\n",
    "print(response)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 一些面向 RAG 的文档解析辅助工具\n",
    "\n",
    "- [PyMuPDF](https://pymupdf.readthedocs.io/en/latest/): PDF 文件处理基础库，带有基于规则的表格与图像抽取（不准）\n",
    "- [RAGFlow](https://github.com/infiniflow/ragflow): 一款基于深度文档理解构建的开源 RAG 引擎，支持多种文档格式（火爆）\n",
    "- [Unstructured.io](https://unstructured.io/): 一个开源+SaaS形式的文档解析库，支持多种文档格式\n",
    "- [LlamaParse](https://docs.llamaindex.ai/en/stable/llama_cloud/llama_parse/)：付费 API 服务，由 LlamaIndex 官方提供，解析不保证100%准确，实测偶有文字丢失或错位发生\n",
    "- [Mathpix](https://mathpix.com/)：付费 API 服务，效果较好，可解析段落结构、表格、公式等，贵！\n",
    "\n",
    "在工程上，PDF 解析本身是个复杂且琐碎的工作。以上工具都不完美，建议在自己实际场景测试后选择使用。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 六、说说 GraphRAG\n",
    "\n",
    "<img src=\"./assets/GraphRAG.png\" style=\"margin-left: 0px\" width=\"800px\">"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1. **什么是 GraphRAG**：核心思想是将知识预先处理成知识图谱\n",
    "2. **优点**：适合复杂问题，尤其是以查询为中心的总结，例如：“XXX团队去年有哪些贡献”\n",
    "3. **缺点**：知识图谱的构建、清洗、维护更新等都有可观的成本\n",
    "4. **建议**：\n",
    "   - GraphRAG 不是万能良药\n",
    "   - 领会其核心思想\n",
    "   - 遇到传统 RAG 无论如何优化都不好解决的问题时，酌情使用"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 总结\n",
    "\n",
    "### RAG 的流程\n",
    "\n",
    "- 离线步骤：\n",
    "  1. 文档加载\n",
    "  2. 文档切分\n",
    "  3. 向量化\n",
    "  4. 灌入向量数据库\n",
    "- 在线步骤：\n",
    "  1. 获得用户问题\n",
    "  2. 用户问题向量化\n",
    "  3. 检索向量数据库\n",
    "  4. 将检索结果和用户问题填入 Prompt 模版\n",
    "  5. 用最终获得的 Prompt 调用 LLM\n",
    "  6. 由 LLM 生成回复\n",
    "\n",
    "### 我用了一个开源的 RAG，不好使怎么办？\n",
    "\n",
    "1. 检查预处理效果：文档加载是否正确，切割的是否合理\n",
    "2. 测试检索效果：问题检索回来的文本片段是否包含答案\n",
    "3. 测试大模型能力：给定问题和包含答案文本片段的前提下，大模型能不能正确回答问题"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 作业\n",
    "\n",
    "做个自己的 ChatPDF。需求：\n",
    "\n",
    "1. 从本地加载 PDF 文件，基于 PDF 的内容对话\n",
    "2. 可以无前端，只要能在命令行运行就行\n",
    "3. 其它随意发挥"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": ".venv",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.10.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
